我有
byte i = 30;
i <<= 3;
System.out.println(i);
我相信会将00011110
更改为11110000
这样做实际上是将一个放入有符号位,还是将在有符号位中截断并且有符号位被更改的位其他方式?
此外,这会打印出-16
。为什么是这样?我认为基数10中的11110000
等于-112
,我对-16
来自哪里感到困惑。
答案 0 :(得分:3)
从右到左,一个字节的位代表1,2,4,8,16,32,64和-128。
我们称之为符号位,但实际上它代表-128。
因此,{p>11110000
为16 + 32 + 64 - 128 == -16
。