在Java中,左移字节会改变有符号位吗?

在Java中,左移字节会改变有符号位吗?,java,byte-shifting,Java,Byte Shifting,我有 字节i=30; i从右到左,字节的位表示1、2、4、8、16、32、64和-128 我们称之为符号位,但实际上它代表-128 因此,11110000是16+32+64-128==-16可能的重复-11110000是2的补码形式。转换为十进制给出-16 2的补码如何工作?谷歌说你把字节倒过来加1,但这不会产生00010000或正数16吗?@kneedhelp是的,但最后一步是加负数。试着在线计算2的十进制补码。要找出两个补码负数的正数,翻转所有位,将1加到结果中11110000⇒ 00001

我有

字节i=30;

i从右到左,字节的位表示1、2、4、8、16、32、64和-128

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


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

可能的重复-
11110000
是2的补码形式。转换为十进制给出-16 2的补码如何工作?谷歌说你把字节倒过来加1,但这不会产生
00010000
或正数16吗?@kneedhelp是的,但最后一步是加负数。试着在线计算
2的十进制补码。要找出两个补码负数的正数,翻转所有位,将1加到结果中<代码>11110000
⇒ <代码>00001111
⇒ <代码>00010000=
16
。因此,
11110000
=
-16
。编译器对待第一位是否与其他位有所不同?我不确定我是否理解你的问题。也许我不确定这里发生了什么。如果符号位是1,它会在输出中加上-128?没错。符号位仅在一些方面与其他符号位不同。对于加法和乘法,您可以以相同的方式处理所有8位,但当您将字节转换为字符串(如
“-16”
)时,符号位必须以不同的方式处理。
byte i = 30;
i <<= 3;
System.out.println(i);