domingo, 17 de abril de 2016

Operadores de rotación en Java.

OPERADORES EN JAVA

Operadores de asignación.


Estos operadores actúan sobre valores enteros al rotar sus valores binarios hacia la derecha o izquierda.
El rotar un entero hacia la izquierda causa que un cero sea colocado en el dígito menos significativo, moviendo todos los demás dígitos una posición hacia la izquierda, y perdiendo el último dígito más significativo (el dígito que se encuentra más a la izquierda).
Ejemplo:
0 0 1 0 1 1 0 1 (45)
Si este valor fuera desplazado una vez hacia la izquierda (usando el operador <<), se obtendría lo siguiente:
0 1 0 1 1 0 1 0 (90)
Esto sucede así porque un byte es desplazado hacia la izquierda, mientras un cero es añadido en el extremo derecho de la cantidad, así:
 
Explicación adicional: 
De forma similar, el operador de rotación hacia la derecha mueve los dígitos hacia la derecha. La única diferencia es que uno es signado (>>) y el otro no (>>>). El signado coloca el bit del signo en el extremo izquierdo de la cantidad mientras desplaza los bits restantes hacia la derecha, mientras que el no signado siempre coloca un cero en el extremo derecho sin importar el bit del signo, desplazando todos los bits (incluido el del signo) hacia la derecha.
0 0 1 0 1 1 0 1 (45)
Al usar >> o >>> se obtiene:
0 0 0 1 0 1 1 0 (22)
 
Explicación adicional:
 
 
Ejemplo:
public class DemoRotacion {
    public static void main(String [] args) {
        byte b = 11;
        System.out.println("Valor original = " + b);  // ¿Qué imprime?
       
System.out.println("Correr 1 bit a la izquierda = " +  (b << 1));  // ¿Qué imprime?
        System.out.println("Correr 1 bit signado a la derecha = " +  (b >> 1));  //
¿Qué imprime?
        System.out.println("Correr 1 bit no signado a la derecha = " + (b >>> 1));
        //
¿Qué imprime? ¿Por qué?
       
byte c = -10;
        System.out.println("Valor original = " + c);  //
¿Qué imprime?
        System.out.println("Correr 3 bits a la izquierda = " + (c << 3)); 
¿Qué imprime?
        System.out.println("Correr 1 bit signado a la derecha = " + (c >> 1));  //
¿Qué imprime?
        System.out.println("Correr 1 bit no signado a la derecha = " + (c >>> 1));
       //
¿Qué imprime? ¿Por qué?
      }
}


No hay comentarios:

Publicar un comentario