按位NOT的奇怪输出

Vao*_*ter 14 c++ bit-manipulation

我试图取一个0的补码得到1但我得到4294967295.这是我做的:

 unsigned int x = 0;
 unsigned int y= ~x;
 cout << y;
Run Code Online (Sandbox Code Playgroud)

我的输出是4294967295,但我期望1,为什么会这样呢?顺便说一下,我在C++中这样做.

Mar*_*ers 26

你为什么期待1?逐位补码翻转所有位.

00000000000000000000000000000000 = 0
              |
          bitwise NOT
              |
              v
11111111111111111111111111111111 = 4294967295
Run Code Online (Sandbox Code Playgroud)

也许你在想一个合乎逻辑的NOT.在C++中,这是写的!x.


Hea*_*r M 6

您必须以二进制形式查看此内容才能准确了解所发生的情况.

unsigned int x = 0,是00000000 00000000 00000000 00000000在记忆中.

~x语句翻转所有位,意味着上述变为:

11111111 11111111 11111111 11111111

以十进制形式转换为4294967295.

XOR只允许您翻转某些位.如果您只想翻转最低位,请x ^ 1改用.