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é?
}
}
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