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