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?
         */
    }
}

Respuestas a la pregunta(5)

Su respuesta a la pregunta