>>>和>>之间的区别
Java中的操作符>>>
和>>
什么区别?
>>
是算术右移, >>>
是逻辑右移。
在算术移位中,符号位被扩展以保持数字的符号性。
例如:以8位表示的-2将是11111110
(因为最重要的位具有负权重)。 使用算术移位将它右移一位会给你11111111
或-1。 然而,逻辑右移并不关心该值可能代表一个有符号的数字; 它只是将所有内容向右移动,并从0开始填充。 使用逻辑移位将我们-2右移一位将给出01111111
。
>>>
是无符号移位; 它会插入0. >>
被签名,并将扩展符号位。
JLS 15.19移位操作符
移位运算符包括左移<<
,有符号右移>>
和无符号右移>>>
。
值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加到最左边的位。
相关问题
1 >>> 32 == 1
它们都是右移,但是>>>
没有unsigned
从文档:
无符号右移运算符“>>>”将零移动到最左边的位置,而“>>”之后的最左边位置取决于符号扩展。
链接地址: http://www.djcxy.com/p/80899.html