Java中Integer.MAX_VALUE的乘法

时间:2013-03-25 07:31:23

标签: java

我刚刚在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如何计算它?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

Integer.MAX_VALUE * 2 = 0xfffffffe,即-2

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

依旧......

答案 2 :(得分:0)

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