Возможный дубликат:
подписанный беззнаковое преобразование в C - всегда ли он безопасен?
Скажем, я объявляю переменную типа unsigned int: unsigned int x = -1;
Теперь -1 в двух дополнениях (при условии 32-разрядной машины) - 0xFFFFFFFF. Теперь, когда я присвоил это значение x, присвоено ли значение 0x7FFFFFFF для x?
Если бы это было так, то printf ( "% d", x); напечатал бы десятичный эквивалент 0x7FFFFFFF, верно? Но, очевидно, этого не происходит, поскольку значение, которое печатается, равно -1. Что мне здесь не хватает?
Изменить: я знаю, что мы можем использовать спецификатор формата% u для печати значений без знака. Но это не помогает ответить на вопрос выше.