我知道操作数会自动转换为int,我们需要再次将表达式转换为byte。对于字节转换,24位被截断,仅评估8位。但是我无法理解这个输出-56。 e的最终值为200,并将其转换为二进制,得到11001000.输出-56如何?
public class ByteIntAutomaticPromotionInExpressions {
public static void main(String[] args) {
byte e = 50;
e = (byte)(e *2);
System.out.println(e);
e *= 2;
System.out.println(e);
}
}
输出:
100
-56
答案 0 :(得分:1)
正如你在这里看到的那样:
byte:字节数据类型是8位带符号的二进制补码整数。它的最小值为-128,最大值为127(含)。
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
如果数据类型是无符号的,则11001000将是十进制的200。 但由于它已签名,您将其视为负二进制数,即 - (反转位+1)=> - (0110111 + 1)= - (0111000)= - 56
https://www.allaboutcircuits.com/textbook/digital/chpt-2/negative-binary-numbers/
答案 1 :(得分:0)
8位,2 ^ 8 = 256,在这种情况下为200-256 = -56