算数右移>>和逻辑右移>>>的区别

1.首先先来了解下为啥没有区分算数左移和逻辑左移?

因为左移的时候无论是算数左移还是逻辑左移,左移过后空出来的低位都用0填充,所以没有区别

2.左移和右移的普遍规律是啥?

假设有个整数N 以int类型举例

如果左移X位,则得到的结果是N*2的X次方

如果右移X位,则得到的结果是N/2的X次方

3.>>>逻辑右移?

因为如果按照逻辑右移来看,

假设移位前是4 ,4>>>2 向右移两位,高位补0,则得到的结果是1;  

那如果是-4呢?-4>>>2 向右移两位,高位补0,得到的结果是1073741823, 那么问题来了,右移两位不应该变成-4/(2的平方)=-1呀,

所以负数的逻辑右移不能得到序号2上的普遍规律

4.>>算数右移,

x=-4

x>>2   则得到的x的结果是-1,

算数右移在正数上高位补0,在负数上高位补1

5.下面是算数右移和逻辑右移图示(图为8位二进制数):

逻辑右移,根据数字类型是long还是int等的不同,相同的移位得到的值也不同,以上代码是int型,32位,逻辑右移2位得到1073741823

下图是8位,逻辑右移两位,得到63

猜你喜欢

转载自blog.csdn.net/yanfei464486/article/details/111312630