Difference Between >> and >>> Operators in Java

Java Q&A Hub 使用 GPT-4o-mini 回答

问题:

In Java, Explain the difference between >> and >>> operators.

回答:

In Java, the >> and >>> operators are both used for bitwise shifting, but they behave differently when it comes to handling the sign bit (the leftmost bit in a binary representation that indicates whether the number is positive or negative).

>> (Signed Right Shift Operator)

  • The >> operator is known as the signed right shift operator.
  • When you use >>, the sign bit is preserved. This means that if the number is positive (the sign bit is 0), the empty bits on the left will be filled with 0s. If the number is negative (the sign bit is 1), the empty bits will be filled with 1s.
  • This operator effectively divides the number by 2 for each shift to the right, while maintaining the sign of the number.

Example:

int a = -8; // In binary: 11111111 11111111 11111111 11111000
int result = a >> 2; // Result: 11111111 11111111 11111111 11111110 (which is -2)

>>> (Unsigned Right Shift Operator)

  • The >>> operator is known as the unsigned right shift operator.
  • When you use >>>, the empty bits on the left are always filled with 0s, regardless of the sign of the original number. This means that it treats the number as an unsigned value.
  • This operator effectively divides the number by 2 for each shift to the right, but it does not preserve the sign of the number.

Example:

int a = -8; // In binary: 11111111 11111111 11111111 11111000
int result = a >>> 2; // Result: 00111111 11111111 11111111 11111110 (which is a large positive number)

Summary

  • >> (signed right shift) preserves the sign bit, filling with 1s for negative numbers and 0s for positive numbers.
  • >>> (unsigned right shift) always fills with 0s, regardless of the sign of the original number.

This distinction is particularly important when working with negative numbers and when you need to ensure that the result of a shift operation is treated as an unsigned value.