我正在尝试反转 32 位的无符号 int,想将零变成 1,将 1 变成零,但似乎有问题。
输入: 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