反转(反转)32位unsigned int位数字

问题描述 投票:0回答:1

我正在尝试反转32位的无符号整数,想要将零转为一,将一转为零,但似乎有问题。

输入:3

输出:4294967292

预期输出:2147483648

int main() {

    unsigned int n;
    scanf("%u",&n);

    n^=4294967295;
    printf("%u",n);

    return 0;
}
c bit
1个回答
2
投票

你的期望是错误的。

让我们用十六进制做所有事情:

0x00000003 ^ 0xffffffff = 0xfffffffc

因此,十六进制的正确输出是

0xfffffffc
,即(无符号)十进制的
4294967292

或二进制:

  00000000000000000000000000000011    0x00000003
^ 11111111111111111111111111111111    0xffffffff
----------------------------------    ----------
  11111111111111111111111111111100    0xfffffffc
© www.soinside.com 2019 - 2024. All rights reserved.