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.
您必须以二进制形式查看此内容才能准确了解所发生的情况.
unsigned int x = 0,是00000000 00000000 00000000 00000000在记忆中.
该~x语句翻转所有位,意味着上述变为:
11111111 11111111 11111111 11111111
以十进制形式转换为4294967295.
XOR只允许您翻转某些位.如果您只想翻转最低位,请x ^ 1改用.
| 归档时间: |
|
| 查看次数: |
11799 次 |
| 最近记录: |