((byte) 128 & (byte) 128) == 128

((byte) 128 & (byte) 128) == 128 ? (byte) 1 : (byte) 0;这个是bug修复前的,
((byte) 128 & (byte) 128) == (byte)128 ? (byte) 1 : (byte) 0;,这个是bug修复后的。

3个回答

不知道题主想问什么,尴尬。答案的话显然就是1了。下面仔细解释下自己对这行代码的理解:
首先,计算机系统中数值编码方式一律为补码。
整型的128补码为0000 0000 0000 0000 0000 0000 1000 0000,强制类型转换为byte后为补码:1000 0000,表示的是-128.
1000 000&1000 000显然等于1000 000,也就是(byte)128,所以答案显然是1.
public class my {
public static void main(String[] args){
byte i = (byte)128;

    System.out.println(i);

    System.out.println(((byte) 128 & (byte) 128) == (byte)128 ? (byte) 1 : (byte) 0);
}

}


m0_37608723
m0_37608723 (byte)128 int向下转型为byte,4字节转为1字节,丢失精度,对应二进制为10000000,所以(byte)128对应的十进制是-128 (int)(byte)128 将(byte)128向上转型为int,由于为负数,所以高位补1,其实byte转型为int不会发生数值的变化,只是内存中的字节数会发生变化。
接近 2 年之前 回复
m0_37608723
m0_37608723 我的理解是:对于byte转型为int时,正数直接高位补0,数值不变;对于负数,高位补1。此例中,(byte)128对应10000000,表示-128,然后将(byte)-128转型为int时,由于是负数,高位补1,即为24个1+100000000,这个4b的二进制数为补码,转换成十进制为-128。不知道这么理解对不对。
接近 2 年之前 回复
m0_37608723
m0_37608723 我的理解是:对于byte转型为int时,正数直接高位补0,数值不变;对于负数,高位补1。此例中,(byte)128将128
接近 2 年之前 回复
m0_37608723
m0_37608723 其实我知道运行结果,您说的我也知道。我主要想问的是((byte) 128 & (byte) 128) == 128的运行过程。这行代码等价于(byte) 128 == (int)128,然后byte128与int进行运算时会强制转型为int,我主要是想知道(byte)128(二进制码10000000)强制转型为int的过程及结果。感谢
接近 2 年之前 回复

((byte) 128 & (byte) 128) == 128具体发生了什么啊?我的理解是:等号左边的与运算是结果是 “10000000",byte类型,然后进行equality运算。这个equality
运算是byte==int,这期间具体发生了什么?

对于有符号的数,128溢出了。
(byte)128 = 0

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问