在给定的例子中:
int a, b, c;
a = 2111000333;
b = 1000222333;
c = a + b;
System.out.println("c= " + c);
将返回:c= -1183744630
,为什么?
如何解决这个问题?
答案 0 :(得分:11)
你的整数溢出。整数的最大值为Integer.MAX_VALUE
(2 ^ 31 - 1)。如果值变大,则变量将不再具有正确的值。
长期有更大的范围。
long a, b, c;
a = 2111000333;
b = 1000222333;
c = a + b;
System.out.println("c= " + c);
答案 1 :(得分:9)
Java long的MAX_VALUE是9223372036854775807,因此Scharrels的解决方案适用于您的示例。
如果需要,这是另一种可以更高的解决方案。
BigInteger a = new BigInteger(2111000333);
BigInteger b = new BigInteger(1000222333);
BigIntegerc = a.add(b);
System.out.println("c= " + c);
此方法仅受JVM内存限制。
答案 2 :(得分:4)
long a, b, c;
a = 2111000333;
b = 1000222333;
if (b > LONG.MAX_VALUE - a) {
// a and b cannot be added.
}
答案 3 :(得分:2)
Java中int的最大值是2,147,483,647。 如果要计算超过此值的内容,则必须使用 long 类型。
答案 4 :(得分:1)
int数据类型是32位带符号的二进制补码整数。它的最小值为-2,147,483,648,最大值为2,147,483,647