>>>和>>的区别
和 运算符在 Java 中有什么区别?>>>
>>
>>
是算术向右移位,是逻辑向右移位。>>>
在算术移位中,符号位被扩展以保持数字的有符号性。
例如:以 8 位表示的 -2 将是(因为最高有效位具有负权重)。使用算术移位将其右移一位会得到 ,或 -1。然而,逻辑右移并不关心该值是否可能表示有符号数字;它只是将所有内容向右移动,并从左侧填充0。使用逻辑移位将 -2 向右移动一位将得到 .11111110
11111111
01111111
>>>
是无符号移位;它将插入 0。 已签名,并将扩展符号位。>>
换挡运算符包括左移位、有符号右移位和无符号右移位。
<<
>>
>>>
的值是带有符号扩展的右移位位置。
n>>s
n
s
的值是具有零扩展名的右移位位置。
n>>>s
n
s
System.out.println(Integer.toBinaryString(-1));
// prints "11111111111111111111111111111111"
System.out.println(Integer.toBinaryString(-1 >> 16));
// prints "11111111111111111111111111111111"
System.out.println(Integer.toBinaryString(-1 >>> 16));
// prints "1111111111111111"
为了让事情更清楚,添加积极的对应物
System.out.println(Integer.toBinaryString(121));
// prints "1111001"
System.out.println(Integer.toBinaryString(121 >> 1));
// prints "111100"
System.out.println(Integer.toBinaryString(121 >>> 1));
// prints "111100"
由于它是正数,因此有符号和无符号移位都会向最左边的位添加0。