【发布时间】:2017-02-15 16:11:49
【问题描述】:
为什么会有这段代码:
#include <iostream>
int main ()
{
int x = 1;
int y = ~x;
std::cout << y;
}
总是打印 -(x+1)?如果 x = 00000001,难道 y = 11111110?
【问题讨论】:
-
"如果 x = 00000001,y = 11111110?"是的。但是
11111110作为有符号整数是-2。 Two's Complement -
int有一个标志。您可能想尝试使用unsigned int -
@black-goat:但
y是1...11111110在你的实验中。是什么让你认为它不是一开始的?-(x+1)是-2,在 2 的补码系统上是1...11111110。 IE。一切都按照您的预期进行。 -
如果
int有 32 位,~x在二进制中是11111111 11111111 11111111 11111110。int肯定有超过 8 位会导致11111110。不管位数多少,逻辑都是一样的。