Этот вопрос задан раньше, но я все еще запутался.
Я знаю, что
unsigned int a = -1;
будет UINT_MAX
. Но это не потому, что все биты -1 установлены. C11 говорит
если новый тип без знака, значение преобразуется путем многократного добавления или вычитая одно больше максимального значения, которое может быть представлено в новом типе пока значение не окажется в диапазоне нового типа
Итак, скажем, 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?
Также есть ответ на С++?