左移一个字节会改变 Java 中的带符号位吗?

Does left shifting a byte change the signed bit in Java?

我有

byte i = 30;
i <<= 3;
System.out.println(i);

我相信这会将 00011110 更改为 11110000 这样做实际上是将一个 1 放入有符号位中,还是将在有符号位中的那个被切断并有符号位是否以其他方式更改?

此外,这会打印出 -16。为什么是这样?我以为 11110000 以 10 为基数等于 -112,我很困惑 -16 来自哪里。

一个字节的位从右到左分别代表1、2、4、8、16、32、64、-128。

我们称它为符号位,但实际上它代表-128。

11110000 因此是 16 + 32 + 64 - 128 == -16.