7

我只是在玩Java。写了这个小程序:

public class MaxValue{
    public static void main(String[] args){
        int i  =  Integer.MAX_VALUE;
        for(int j = 1; j<=10;j++){
            System.out.println(i*j);
        }
    }
}

输出如下:

2147483647

-2

2147483645

-4

2147483643

-6

2147483641

-8

2147483639

-10

现在我很惊讶。我不知道如何解释这个输出。我知道我可以使用 long 来处理超过整数最大限制的值。但是我只想知道java如何计算这个?

4

3 回答 3

3

我们需要分析结果的二进制内容:

Integer.MAX_VALUE * 1 = 0x7fffffff 十进制 2147483647

Integer.MAX_VALUE * 2 = 0xffffffffe 即 -2

Integer.MAX_VALUE * 3 = 0x17ffffffd 但它是 33 位,截断后是 0x7ffffffd 即 2147483645

等等...

于 2013-03-25T08:02:45.530 回答
2

它被称为溢出。由于您在最大可能值上进行操作,因此任何数学递增操作都可能最终导致溢出。

有关 Java 溢出的更多信息:http: //javapapers.com/core-java/java-overflow-and-underflow/

于 2013-03-25T07:44:47.110 回答
1

您所遇到的称为overflow原始类型 java 将通过以下方式处理此问题: - 到达时Integers.MAX_VALUE它只会转到 the Integer.MIN_VALUE,这样您只会得到一个负值

于 2013-03-25T07:40:32.820 回答