Comportamiento de desplazamiento a la izquierda en modo bit
Hoy estaba aprendiendo sobre el operador de bit de cambio a la izquierda (<<
). Como lo entiendo, el operador de bit de desplazamiento a la izquierda mueve los bits a la izquierda como se especifica. Y también sé multiplicar por 2 para desplazar. Pero estoy confundido, por ejemplo, ¿cuál es exactamente el significado de "bits de desplazamiento" y por qué la salida difiere cuando se asigna un valor a un tipo diferente?
Cuando llamo a la función de abajo, da salida comoSystem.out.println("b="+b); //Output: 0
Y mi pregunta es: ¿cómo se convierte b en 0 y por qué se tipea b?
public void leftshiftDemo()
{
byte a=64,b;
int i;
i=a << 2;
b=(byte)(a<<2);
System.out.println("i="+i); //Output: 256 i.e 64*2^2
System.out.println("b="+b); //Output: 0 how & why b is typecasted
}
Actualizar (nueva duda):
¿Qué significa "Si cambia un bit 1 a la posición de orden superior (Bit 31 o 63), el valor se volverá negativo". p.ej.
public void leftshifHighOrder()
{
int i;
int num=0xFFFFFFE;
for(i=0;i<4;i++)
{
num=num<<1;
System.out.println(num);
/*
* Output:
* 536870908
* 1073741816
* 2147483632
* -32 //how this is -ve?
*/
}
}