Битовое поведение влево

Сегодня я узнал о битовом операторе левого сдвига (<<). Как я понимаю, левый битовый оператор сдвига перемещает биты влево, как указано. А также я знаю, умножить на 2 для переключения. Но я сбит с толку, например, что именно означает «сдвигающиеся биты» и почему выходные данные отличаются, когда значение присваивается другому типу?

Когда я вызываю функцию ниже, это дает вывод какSystem.out.println("b="+b); //Output: 0

И мой вопрос: как b становится 0 и почему 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
}

Обновить (новое сомнение):

что означает «Если вы сдвинете 1 бит в старшую позицию (бит 31 или 63), значение станет отрицательным». например.

public void leftshifHighOrder()
{
    int i;
    int num=0xFFFFFFE;

    for(i=0;i<4;i++)
    {
        num=num<<1;
        System.out.println(num);
        /*
         * Output:
         * 536870908
         * 1073741816
         * 214,7483632
         * -32   //how this is -ve?
         */
    }
}

Ответы на вопрос(5)

Ваш ответ на вопрос