Difference between >>> and >>

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


>> is arithmetic shift right, >>> is logical shift right.

In an arithmetic shift, the sign bit is extended to preserve the signedness of the number.

For example: -2 represented in 8 bits would be 11111110 (because the most significant bit has negative weight). Shifting it right one bit using arithmetic shift would give you 11111111 , or -1. Logical right shift, however, does not care that the value could possibly represent a signed number; it simply moves everything to the right and fills in from the left with 0s. Shifting our -2 right one bit using logical shift would give 01111111 .


>>> is unsigned-shift; it'll insert 0. >> is signed, and will extend the sign bit.

JLS 15.19 Shift Operators

The shift operators include left shift << , signed right shift >> , and unsigned right shift >>> .

The value of n>>s is n right-shifted s bit positions with sign-extension .

The value of n>>>s is n right-shifted s bit positions with zero-extension .

    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"

To make things more clear adding positive counterpart

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"

Since it is positive both signed and unsigned shifts will add 0 to left most bit.

Related questions

  • Right Shift to Perform Divide by 2 On -1
  • Is shifting bits faster than multiplying and dividing in Java? .NET?
  • what is c/c++ equivalent way of doing '>>>' as in java (unsigned right shift)
  • Negative logical shift
  • Java's >> versus >>> Operator?
  • What is the difference between the Java operators >> and >>>?
  • Difference between >>> and >> operators
  • What's the reason high-level languages like C#/Java mask the bit shift count operand?
  • 1 >>> 32 == 1

  • They are both right-shift, but >>> is unsigned

    From the documentation:

    The unsigned right shift operator ">>>" shifts a zero into the leftmost position, while the leftmost position after ">>" depends on sign extension.

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

    上一篇: 如何暂停显示工具提示的标题属性?

    下一篇: >>>和>>之间的区别