移位运算符 ‘<<’ , ‘>>’ , ‘>>>’

测试数据:
image-20211126154552643.png

1、左移运算符:<< 丢弃左边指定位数,右边补0
image-20211126155056537.png

注意:

左移位数大于等于32位操作时,会先求余(%)后再进行左移操作。也就是说左移32位相当于不进行移位操作,左移40位相当于左移8位(40%32=8)。当long类型进行左移操作时,long类型在二进制中的体现是64位的,因此求余操作的基数也变成了64,也就是说左移64位相当于没有移位,左移72位相当于左移8位(72%64=8)

2、右移运算符:>> 丢弃右边指定位数,左边补上符号位。
image-20211126154955178.png

注意:

和左移一样,int类型移位大于等于32位时,long类型大于等于64位时,会先做求余处理再位移处理,byte,short移位前会先转换为int类型(32位)再进行移位。

3、无符号右移运算符:>>> 丢弃右边指定位数,左边补上0。

无符号右移运算符>>>和右移运算符>>是一样的,只不过右移时左边是补上符号位,而无符号右移运算符是补上0,也就是说,对于正数移位来说等同于:>>,负数通过此移位运算符能移位成正数。

image-20211126155128256.png