计算超出 Java Long 类型最大值

Calculation exceeding the Java Long type maximum

在eclipse中与Long类型的最大值相乘得到如下结果。我想知道结果是什么意思。

    long long1 = 9223372036854775807L;
    long long2 = 9223372036854775807L;
    int n = 5;
    long tmp_long = long1*long2;
    
    System.out.println(long1*n);
    System.out.println(tmp_long);

enter image description here

Java 有一个 BigInteger class 来管理此类整数。

结果太大,无法放入 long 中,并且会溢出,这就是您获得这些结果的原因。如果你需要正确处理这么大的数字,你应该使用 BigInteger class.

BigInteger int1 = BigInteger.valueOf(9223372036854775807L);
BigInteger int2 = BigInteger.valueOf(9223372036854775807L);
BigInteger n = BigInteger.valueOf(5);
System.out.println(int1.multiply(n));
System.out.println(int1.multiply(int2));

或者,如果您希望溢出引发错误,您可以使用 Math.multiplyExact(long, long)

long long1 = 9223372036854775807L;
long long2 = 9223372036854775807L;
int n = 5;
System.out.println(Math.multiplyExact(long1, n));
System.out.println(Math.multiplyExact(long1, long2));