在Java中转换字节后,正值如何变为负值?

时间:2013-09-12 02:11:36

标签: java casting

public class Test1 {

    public static void main(String[] args) {

        byte b1=40;
        byte b=(byte) 128;

        System.out.println(b1);
        System.out.println(b);
    }
}

输出

  

40
  -128

第一个输出是40我理解但是第二个输出-128怎么可能?是否有可能因为它超出了它的范围?如果是,它在字节转换后如何工作...帮帮我

2 个答案:

答案 0 :(得分:11)

当您将128(10000000二进制)转换为8位byte类型时,符号位将设置为1,因此该数字将被解释为负数。 Java使用Two's Complement representation,因此10000000-128 - 可以用8位表示的最小负数。

根据这种解释,129变为-127130变为-126,依此类推,一直到25511111111在二进制中),变为-1

答案 1 :(得分:1)

Java中的一个字节以8位二进制补码格式表示。如果你有一个在128 - 255范围内的int并将它转换为byte,那么它将成为一个负值(在-1和-128之间)的字节。

话虽如此,你应该避免使用字节,因为它们存在问题。您会注意到是否将结果转换为byte,因为运算符实际返回int。你应该坚持使用java中的int和long,因为它们的实现更好。