Java >> Tutorial de Java >  >> Java

Operador de desplazamiento a la derecha bit a bit en Java

Java admite dos tipos de operadores de desplazamiento a la derecha. El >> operador es un operador de desplazamiento a la derecha firmado y >>> es un operador de desplazamiento a la derecha sin firmar. El valor de los operandos de la izquierda se mueve hacia la derecha el número de bits especificado por el operando de la derecha.

Operador de turno a la derecha firmado

El operador de desplazamiento a la derecha firmado '>>' usa el bit de signo para llenar las posiciones finales. Por ejemplo, si el número es positivo, se usará 0 para llenar las posiciones finales y si el número es negativo, se usará 1 para llenar las posiciones finales.

Suponga que a =60 yb =-60; ahora en formato binario, serán los siguientes −

a = 0000 0000 0000 0000 0000 0000 0011 1100
b = 1111 1111 1111 1111 1111 1111 1100 0100

En Java, los números negativos se almacenan como complemento a 2.

Thus a >> 1 = 0000 0000 0000 0000 0000 0000 0001 1110
And b >> 1 = 1111 1111 1111 1111 1111 1111 1110 0010

Operador de turno a la derecha sin firmar

El operador de desplazamiento a la derecha sin signo '>>>' no utiliza el bit de signo para llenar las posiciones finales. Siempre llena las posiciones finales por 0s.

Thus a >>> 1 = 0000 0000 0000 0000 0000 0000 0001 1110
And b >>>  1 = 0111 1111 1111 1111 1111 1111 1110 0010

Ejemplo

Demostración en vivo

public class Tester {
   public static void main(String[] args) {
      int a = 60;          int b = -60;        int c = 0;
      System.out.println("60  = " + Integer.toBinaryString(a));
      System.out.println("-60 = " + Integer.toBinaryString(b));

      //signed shift
      c = a >> 1;              
      System.out.println("60 >> 1  = " + Integer.toBinaryString(c));

      //unsigned shift
      c = a >>> 1;            
      System.out.println("60 >>> 1 = " + Integer.toBinaryString(c) );

      c = b >> 1;              
      System.out.println("-60 >> 1  = " + Integer.toBinaryString(c) );

      c = b >>> 1;            
      System.out.println("-60 >>> 1 = " + Integer.toBinaryString(c));
   }
}

Salida

60  = 111100
-60 = 11111111111111111111111111000100
60 >> 1  = 11110
60 >>> 1 = 11110
-60 >> 1  = 11111111111111111111111111100010
-60 >>> 1 = 1111111111111111111111111100010

Etiqueta Java