我正在学习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。
谢谢。
答案 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,则该值被视为负值。