为什么ci1
包含错误的值
当你将三个int相乘并转换为long时会发生什么?
public class integers{
public static void main(String []args){
int im1 = 12*5280;
long ci1;
long im2 = 12*5280;
long ci2;
ci1 = im1 * im1 * im1;
ci2= im2 * im2* im2;
System.out.println(im1+" "+ci1);
System.out.println(im2 +" "+ci2);
}
}
输出
63360 1507852288
63360 254358061056000
第二行是正确答案,63360英尺很容易进入int
答案 0 :(得分:4)
整数可以容纳is roughly 2 billion (2,147,483,648)的最大值。乘法的结果大约是200万亿(254,358,061,056,000)。这是integer overflow的情况。
int * int * int
会在它扩展为long并分配给long变量之前给出一个整数。
答案 1 :(得分:3)
使用操作数的类型执行乘法 - 您将结果分配的类型与它无关。因此,当您将int
乘以时,会出现溢出,因为254358061056000
不适合int
。只有这样才会将结果转换为long
。
答案 2 :(得分:1)
事实上,
在赋值之前:ci1 =
这是一个很长的java句柄,正确的部分,
在哪里操纵int
。
int * int
返回int
您尝试获取的值是long
,您需要明确它
你可以告诉java你想要长时间操作
public static void main(String[] args) {
int im1 = 12 * 5280;
long ci1;
long im2 = 12 * 5280;
long ci2;
ci1 = (long)im1 * (long)im1 * (long)im1;
ci2 = im2 * im2 * im2;
System.out.println(im1 + " " + ci1);
System.out.println(im2 + " " + ci2);
}