这是我的代码
int a=2147483647;
int b= a<<1;
cout<<"a="<<a<<", b="<<b;
我得到的输出是- a=214783647, b=-2
a的二进制表示是
0111 1111 1111 1111 1111 1111 1111 1111
通过将其移动 1 位,它将改变符号位并将 LSB 替换为 0。因此,我认为答案将是 -ve,幅度将减去 1,即 -2147483646 但它给出的结果为 -2 。请解释。
最佳答案
这是因为您的计算机对有符号值使用 2 补码。
无符号移位值是 0xFFFFFFFE
,即 2 补码中的 -2,而不是 -2147483647
。
Shifting 是用 C 定义的实现。
顺便说一句,-2147483647
在这样的 CPU 上是 0x80000001
。
关于C++左移操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55456995/