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

时间:2016-03-25 04:16:22

标签: java byte-shifting

我有

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

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

此外,这会打印出-16。为什么是这样?我认为基数10中的11110000等于-112,我对-16来自哪里感到困惑。

1 个答案:

答案 0 :(得分:3)

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

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

因此,{p> 1111000016 + 32 + 64 - 128 == -16