Скажем, есть тип данных, определенный как таковой:Препроцессор C определяет для значения заданного типа, где каждый байт равен 0xFF?
typedef int my_integer_type;
Где-то еще, существует подобный код
#define MAX_MY_INTEGER_TYPE 0xFFFFFFFF
Однако, если my_integer_type позже изменено на 8 байт вместо 4, MAX_MY_INTEGER_TYPE будет необходимо также обновить. Есть ли способ для MAX_MY_INTEGER_TYPE быть более умным, чтобы в основном представлять количество байтов в my_integer_type, все установлены в 0xFF?
Я понимаю, что существуют другие традиционные способы получения максимального целочисленного размера (например, здесь: maximum value of int), но мой фактический прецедент немного сложнее, и я не могу применять эти решения.
Это кажется максимальным для ** неподписанного типа **. Если это так, то просто '#define MAX_MY_INTEGER ((my_unsigned_integer) -1)'. –
@ H2CO3 - Вы имели в виду '#define MAX_MY_INTEGER_TYPE ((my_integer_type) 0 - 1)'? EDIT: Nevermind, я вижу, вы выбрасывали -1. Уже пятница? –
Если вы хотите установить все биты в 1 в неподписанном типе, вы можете использовать '#define MAX_MY_INTEGER_TYPE -1' Я не уверен, что гарантии для подписанных типов, хотя я подозреваю, что он также установил бы все биты в 1 на системах комплемента 2. – nos