左移一个字节会改变 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
.
我有
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
.