C语言 反转(反转)32 位无符号整数位数字



我正在尝试反转 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

最新更新