Java Integer超出范围

时间:2015-06-03 10:16:03

标签: java integer

我正在学习Java,而我正在尝试一些小程序。 我有一个问题:

/*
 Compute the number of cubic inches
 in 1 cubic mile.
*/
class Inches {
    public static void main(String args[]) {
        int ci;
        int im;

        im = 5280 * 12;

        ci = im * im * im;

        System.out.println("There are " + ci + " cubic inches in cubic mile.");
    }
}

输出结果为:

There are 1507852288 cubic inches in cubic mile.

我知道整数的位宽是32,所以范围是: -2,147,483,648至2,147,483,647

为什么输出1507852288? 它应该是2,147,483,647。

谢谢。

2 个答案:

答案 0 :(得分:5)

当int操作的结果(如乘法)高于max int值时,它会溢出(即不适合int变量的32位),这意味着赋值给int变量的值是不正确的。如果正确的结果更高,您没有理由期望它返回max int值。

如果您想要正确的结果,请使用longs。

答案 1 :(得分:5)

当结果超过int的最大值时,它会溢出,即integer overflow。您最好使用long代替int

您可能有兴趣阅读:Integer overflow and underflow in Java.

  

算术整数运算以32位精度执行。什么时候   操作的结果值大于32位(   int变量可以保持的最大大小)然后仅采用低32位   考虑到高位比特被丢弃。当MSB   (最高有效位)为1,则该值被视为负值。