Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 整数和长乘法给出了不同的答案_Java - Fatal编程技术网

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。谢谢