无符号右移-1?关于Java位移,多数人不知道的

之前看java源码的时候,看到有一个语句,整型无符号右移一个负数(如1024>>-22),当时惊呼:“还有这种操作,老师没教过啊”,老师确实没教过!
当时网上查了一下,发现:对于int类型,移位操作只关注移位参数转换成二进制后对应的后5位(bit);long则只关注后6位
举个栗子:

System.out.println(1024 >>> 10 == 1024 >>> 42);// true
System.out.println(1024 >>> 10 == 1024 >>> -22);// true

其中,10转换成二进制后是1010,42转换成二进制后是10101,-22转换成二进制后是11111111111111111111111111101010,所有的都是最后5个bit是01010,所以无符号右移之后都相等。
印象中应该不少书都没讲解到这个知识点,上大学的时候,老师更加没提过这个。

上一篇:题105.pat甲级练习-1004 Counting Leaves (30 分)


下一篇:HttpClient-4.5总结(1)