计算超出 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));
在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));