Java 为什么不';进行右移操作时,t自动将0b10101010扩展到4字节(Int)

Java 为什么不';进行右移操作时,t自动将0b10101010扩展到4字节(Int),java,Java,下面是一段代码: byte c = (byte) (0b10101010); byte d = (byte) (c >> 1); System.out.println(d); byte c = (byte) (0b10101010 >> 1); System.out.println(c ); 结果是-85。(我知道原因,因为在进行右移操作之前,字节c会自动扩展到int(较高的3个字节组成1)) 下面是另一段代码: byte c = (byte) (0b10101010

下面是一段代码:

byte c = (byte) (0b10101010);
byte d = (byte) (c >> 1);
System.out.println(d);
byte c = (byte) (0b10101010 >> 1);
System.out.println(c );
结果是-85。(我知道原因,因为在进行右移操作之前,字节c会自动扩展到int(较高的3个字节组成1))

下面是另一段代码:

byte c = (byte) (0b10101010);
byte d = (byte) (c >> 1);
System.out.println(d);
byte c = (byte) (0b10101010 >> 1);
System.out.println(c );

结果是85。所以我的问题是,在执行右移操作之前,为什么二进制代码(0b10101010)不扩展到int(ff,ff,ff,0b10101010),就像上面的代码一样?

没有“扩展到int”。正在发生的是符号扩展,这意味着最顶端的位将被符号位填充(负数为1,非负数为0)。

像0b10101010这样的文字具有类型
int
,因此无需将其转换为更大的类型。此外,它是一个正数,因此不会首先应用符号扩展。

因此关键点是0b。。。。有int类型,我认为0xff也是int,是正数,对吗@JoniAll整型文字的类型为int,除非使用后缀L表示长字符。0xff是十进制的255,是的。第一个的结果不是
-85
,而是
-43