[英]Sum of ints below long's max value returns negative?
我有5个对象, a
, b
, c
。 d
和e
。 5个对象的哈希码如下:
a => 72444
b => 110327396
c => 107151
d => 2017793190
e => 68574749
如您所见,所有都是正值。 但是,当我将它们总结为一个long
变量时,结果为负数:
long sum = a+b+c+d+e;
System.out.println(sum); // prints -2098092366
这些整数的总和远低于long
的最大值(9223372036854775807),但得出的结果是负数。 为什么?
发生这种情况是因为您的变量都是int
,所以您将int
加法(溢出),然后将最终结果转换为long
。
您可以通过将第一个变量转换为long
来解决此问题:
long sum = (long)a + b + c + d + e;
整数值可以是-2,147,483,648到2,147,483,647。 该总和实际上超过了最大值,并因numeric overflow
而减半。
int x = 2147483647;
x++;
System.out.println(x);
打印-2147483648
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.