使用下面的代码,我声明了一个 unsigned int 并将其赋值为 236。然后我取它的 1 的补码并将其分配给一个单独的变量。使用 printf 打印时,我希望第二个变量打印为“19”,但打印为“4294967059”。为什么?~ 位运算符不是取第一个变量(基数 2)的值并“翻转”位(1 的补码),导致基数为 10 的“19”吗?我机器上的整数是 32 位的,我认为这与 2^32-1 (4294967295) 有关,但我还没弄清楚
unsigned a = 236; // binary of this 11101100 = 236 base 10
unsigned b = ~a; // 1's complement to 00010011 = 19 base 10
printf("a: %u b: %u",a,b); // prints 236 and 4294967059. WHY?