Java中的自动类型升级

时间:2018-06-12 15:57:51

标签: java casting int byte

我知道操作数会自动转换为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

2 个答案:

答案 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