Чтобы распечатать значения без знака, , особенно при работе с битами , используйте формат без знака для printf
:
printf("%u", x);
Я не уверен, что вы на самом деле запускаете код, который вы показываете. Смотрите это:
#include <stdio.h>
int main()
{
unsigned int x = 3;
unsigned int y = ~x;
printf("Decimal. x=%u y=%u\n", x, y);
printf("Hex. 0x%08X y=0x%08X\n", x, y);
return 0;
}
Выходы:
Decimal. x=3 y=4294967292
Hex. 0x00000003 y=0xFFFFFFFC
Почему значения являются такими, какими они должны быть, должно быть понятно по базовой двоичной арифметике (и с учетом того, что оператор C ~
сбрасывает биты своего аргумента).