Java 整数和长乘法给出了不同的答案
为什么Java 整数和长乘法给出了不同的答案,java,Java,为什么ci1包含错误的值 当你把三个整数乘以并转换成长整数时,会发生什么 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.pr
ci1
包含错误的值
当你把三个整数乘以并转换成长整数时,会发生什么
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 fts很容易转换成整数所能容纳的最大值。乘法的结果大约是200万亿(254358061056000)。这是一个很好的例子
int*int*int
将为您提供一个整数,然后将其加宽为long并分配给long变量。乘法使用操作数的类型执行–您分配结果的类型与此无关。因此,当您将这些int
s相乘时,会出现溢出,因为254358061056000
不适合int
内部。只有这样,结果才被转换为一个long
事实上,
赋值前: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);
}
我认为更好的复制目标是。可能它们有不同的类型,可能有不同的属性…@pkpnd Duely指出。啊,我得到的答案是分配给long的溢出int。谢谢