Ints和Longs乘法给出了不同的答案

时间:2018-05-17 15:10:55

标签: java

为什么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

3 个答案:

答案 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句柄,正确的部分, 在哪里操纵intint * 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);
}