簡體   English   中英

為什么遞增Java int最終會導致負數?

[英]Why does incrementing a Java int eventually result in a negative number?

我試圖檢查不同的輸入並在java中創建無限循環,我發現一旦int增加超過最大限制,它將轉為負-2147482958 我只是在無限循環中增加int ...

碼:

public static void infiniteLoop(){
        for(int i=0;i>-1;i++){
            i = i + 1000;
            System.out.println(i);
        }
    }

打印出來的最后一個值是,

2147483337
-2147482958

現在,為什么會出現負面影響?

它為什么會消極?

因為當int計算溢出時,這就是Java中指定的內容。

JLS 15.18.2

“如果整數加法溢出,則結果是數學和的低階位,如某些足夠大的二進制補碼格式所示。如果發生溢出,那么結果的符號與符號的符號不同兩個操作數值的數學和。“


(這並沒有明確地說溢出總是給出一個負數。並且它並不總是。但是如果你應用規則,它確實解釋了為什么遞增Integer.MAX_VALUE乘以+1給你Integer.MIN_VALUE ...)

根據文件:

int數據類型是32位帶符號的二進制補碼整數。 它的最小值為-2,147,483,648(0x80000000),最大值為2,147,483,647(0x7FFFFFFF)(含)

因此,當您將一個加到整數的最大值時:

0x7FFFFFFF + 0x00000001 = 0x80000000(-2,147,483,648)

因為當int的值達到Integer.MAX_VALUE時 ,遞增它會導致溢出 ,因此會回繞到Integer.MIN_VALUE

要使用更大的整數,請使用long而不是64位

因為int范圍從-2,147,483,648到2,147,483,647。 因此,一旦達到上限,它就會溢出並從負面開始。

查看文檔

int數據類型是32位帶符號的二進制補碼整數。 它的最小值為-2,147,483,648,最大值為2,147,483,647(含)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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