有人可以解释这个程序如何提供这个输出?

时间:2016-05-29 14:04:50

标签: c++ bitwise-operators

int x = -2139062144;  //In binary: 10000000100000001000000010000000
int k = x << 1;

k16843008(二进制文件:1000000010000000100000000),我不明白为什么?

10000000100000001000000010000000如何仅通过一个左移位变为1000000010000000100000000

我希望它是:10000001000000010000000100000000保存符号,因为右移位符号是守恒的。

2 个答案:

答案 0 :(得分:10)

很简单。

您的Throwable最多只能携带32位。好吧,一直都是32位。

int

最重要的前导位是1.

由于左移,你认为这个注定的位会发生什么?

它已经消失了。它不复存在。它加入了合唱团隐形。这是一个前位。

当然,在最不重要的位置有一个刚出生的0位。所以你最终得到了

 10000000100000001000000010000000

结果,或者:

00000001000000010000000100000000

答案 1 :(得分:7)

负值的左移具有未定义的行为。任何事情都可能发生,包括你所看到的。

http://en.cppreference.com/w/cpp/language/operator_arithmetic#Bitwise_shift_operators