之前看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,所以无符号右移之后都相等。
印象中应该不少书都没讲解到这个知识点,上大学的时候,老师更加没提过这个。