我试图弄清楚算术位移运算符在 C 中是如何工作的,以及它将如何影响带符号的 32 位整数。
为简单起见,假设我们在一个字节(8 位)内工作:
x = 1101.0101
MSB[ 1101.0101 ]LSB
阅读 Stack Overflow 和一些网站上的其他帖子,我发现:
<<
将移向 MSB(在我的情况下是向左),并用 0 填充“空”LSB 位。
并将>>
移向 LSB(在我的情况下向右)并用 MS 位填充“空”位
因此,x = x << 7
将导致将 LSB 移动到 MSB,并将所有内容设置为 0。
1000.0000
现在,假设我会>> 7
,最后的结果。这会导致[0000.0010]
? 我对吗?
我对轮班操作员的假设是否正确?
我刚刚在我的机器上测试过,**
int x = 1; //000000000......01
x = x << 31; //100000000......00
x = x >> 31; //111111111......11 (Everything is filled with 1s !!!!!)
为什么?