Битовое поведение влево
Сегодня я узнал о битовом операторе левого сдвига (<<
). Как я понимаю, левый битовый оператор сдвига перемещает биты влево, как указано. А также я знаю, умножить на 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?
*/
}
}