>>>和>>之间的区别

Java中的操作符>>>>>什么区别?


>>是算术右移, >>>是逻辑右移。

在算术移位中,符号位被扩展以保持数字的符号性。

例如:以8位表示的-2将是11111110 (因为最重要的位具有负权重)。 使用算术移位将它右移一位会给你11111111或-1。 然而,逻辑右移并不关心该值可能代表一个有符号的数字; 它只是将所有内容向右移动,并从0开始填充。 使用逻辑移位将我们-2右移一位将给出01111111


>>>是无符号移位; 它会插入0. >>被签名,并将扩展符号位。

JLS 15.19移位操作符

移位运算符包括左移<< ,有符号右移>>和无符号右移>>>

n>>sn右移s符号扩展位的位置。

的值n>>>sn右移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加到最左边的位。

相关问题

  • 右移以2开-1执行分割
  • 比Java中的乘法和除法更快地移位? 。净?
  • 什么是C / C ++等效的方式做'>>>'在Java(无符号右移)
  • 负逻辑转变
  • Java的>>与>>>操作符?
  • Java运算符>>和>>>之间有什么区别?
  • >>>和>>运算符之间的区别
  • 像C#/ Java这样的高级语言屏蔽位移计数操作数的原因是什么?
  • 1 >>> 32 == 1

  • 它们都是右移,但是>>>没有unsigned

    从文档:

    无符号右移运算符“>>>”将零移动到最左边的位置,而“>>”之后的最左边位置取决于符号扩展。

    链接地址: http://www.djcxy.com/p/80899.html

    上一篇: Difference between >>> and >>

    下一篇: stop settimeout in recursive function