Этот вопрос задан раньше, но я все еще смущен.Имеет ли UINT_MAX все биты, установленные в 1?
Я знаю, что
unsigned int a = -1;
UINT_MAX
будет. Но это не потому, что все биты -1 установлены. С11 говорит
, если новый тип без знака, значение преобразуется путем многократного добавления или вычитания больше, чем максимальное значение, которое может быть представлено в новом типе , пока значение не находится в диапазоне новых один тип
Так позволяет сказать UINT_MAX
100 (я знаю, что это должно быть больше 2^16-1, но позволяет игнорировать это сейчас)
unsigned int a = -1; // will be
unsigned int a = -1 + UINT_MAX + 1; // 100 = UINT_MAX
Стандарт говорит только UINT_MAX >= 2^16-1
. Но скажет ли он, что это должно быть 2^n-1?
Также ответ отличается на C++?
Я думаю, что стандарт в основном оставляет точное представление бит значений неопределенным (или зависит от платформы). Есть (были) некоторые действительно странные архитектуры. –