В C или С++ сказано, что максимальное число, которое имеет тип size_t (неподписанный тип данных), может быть таким же, как литиевание -1 для этого типа данных. например, см. Недопустимое значение для size_t
Почему?
Я имею в виду, (говоря о 32-битных ints) AFAIK самый старший бит содержит знак в подписанном типе данных (то есть бит 0x80000000 для формирования отрицательного числа). то 1 - 0x00000001.. 0x7FFFFFFFF - наибольшее положительное число, которое может хранить тип данных int.
Тогда AFAIK двоичное представление -1 int должно быть 0x80000001 (возможно, я ошибаюсь). почему/как это двоичное значение преобразуется во что-то совершенно другое (0xFFFFFFFF) при литье ints в unsigned?? или.. как можно сформировать двоичный -1 из 0xFFFFFFFF?
Я не сомневаюсь, что в C: ((unsigned int) -1) == 0xFFFFFFFF или ((int) 0xFFFFFFFF) == -1 равно true, чем 1 + 1 == 2, мне просто интересно, почему.