我正在尝试反转32位的无符号整数,想要将零转为一,将一转为零,但似乎有问题。
输入:3
输出:4294967292
预期输出:2147483648
int main() {
unsigned int n;
scanf("%u",&n);
n^=4294967295;
printf("%u",n);
return 0;
}
你的期望是错误的。
让我们用十六进制做所有事情:
0x00000003 ^ 0xffffffff = 0xfffffffc
因此,十六进制的正确输出是
0xfffffffc
,即(无符号)十进制的 4294967292
。
或二进制:
00000000000000000000000000000011 0x00000003
^ 11111111111111111111111111111111 0xffffffff
---------------------------------- ----------
11111111111111111111111111111100 0xfffffffc