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

Can someone explain how this programs gives this output?

本文关键字:何提供 输出 程序 解释      更新时间:2023-10-16
int x = -2139062144;  //In binary: 10000000100000001000000010000000
int k = x << 1;

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

10000000100000001000000010000000是如何通过一个左位移变成1000000010000000100000000的?

我期望它是:10000001000000010000000100000000保持符号,如右位移位符号是守恒的。

非常简单。

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

 10000000100000001000000010000000

最重要的前导位是 1。

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

不见了。它不复存在。它隐形地加入了合唱团。这是前一点。

而且,当然,还有一个新生的,0位处于最不重要的位置。所以你最终得到

00000001000000010000000100000000

因此,或:

1000000010000000100000000

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

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