c++ - 有人可以解释这个程序如何给出这个输出吗?

标签 c++ bitwise-operators

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

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

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

我预计它是:10000001000000010000000100000000 保留右移符号中的符号。

最佳答案

非常简单。

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

 10000000100000001000000010000000

最重要的前导位是 1。

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

没了。它不复存在了。它加入了无形的合唱团。这是前任。

当然,最低位有一个新生的 0 位。所以你最终得到了

00000001000000010000000100000000

因此,或者:

1000000010000000100000000

关于c++ - 有人可以解释这个程序如何给出这个输出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37510831/

相关文章:

javascript - 使用按位运算符时 "both bits"是什么意思

C++: union 与按位运算符

c# - 通过将 4 个较小的数字基元类型编码为 long (Int64) 来生成唯一键

java - 为什么这个加法代码(使用按位运算)在 java 中有效

c++ - 从 Vector 中删除一个元素并将其余元素向下移动 - C++

c++ - 在回溯期间检索 sigcontext

java - 我们是否应该将递归调用堆栈视为辅助空间?

c++ - 运算符链接在 C++ 中是如何发生的?

c++ - 在 C++ 中创建 Windows 窗体应用程序(不带 .NET)

java - 按位左移行为