4

我有

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

我相信这会改变0001111011110000这样做是否实际上将一个 1 放入有符号位,或者将在有符号位中的那个被切断并且有符号位以其他方式改变?

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

4

1 回答 1

3

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

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

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

于 2016-03-25T04:24:38.757 回答