簡體   English   中英

低於long的最大值的整數總和是否為負?

[英]Sum of ints below long's max value returns negative?

我有5個對象, abc de 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM