9
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 这怎么可能?有可能是因为它超出了它的范围吗?如果是的话,它在字节转换后如何工作......帮助我

4

2 回答 2

12

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

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

于 2013-09-12T02:13:13.113 回答
0

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

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

于 2013-09-12T02:13:42.020 回答