首頁  >  文章  >  Java  >  為什麼在 Java 中向數值添加“L”會大大改變乘法運算的結果?

為什麼在 Java 中向數值添加“L”會大大改變乘法運算的結果?

Patricia Arquette
Patricia Arquette原創
2024-11-07 04:43:02347瀏覽

Why does adding an

理解數值差異

在提供的程式碼片段中,兩個乘法運算之間的明顯差異源於缺少或存在附加到數值後的「L」字元:

long oneYearWithL = 1000*60*60*24*365L;
long oneYearWithoutL = 1000*60*60*24*365;

附加「L」以確保長值

在第一個表達式中,「L」後綴表示長整型文字,表示該數值應視為64 位元整數。此乘法的結果是每年 31536000000 毫秒的長值。

缺少「L」會導致整數值

在第二個表達式中,沒有「 L」後綴,乘法運算產生一個整數值。在這種情況下,結果是 1471228928,而預期值應超過 30 億毫秒。

整數溢位與截斷

出現差異是因為四乘的結果32 位元整數(1000、60、60 和24)除以第五個32 位元整數(365) 超出了整數範圍,即[-2^31, 2^31-1]。結果迴繞,在第二個表達式中產生錯誤值 1471228928。

轉換為2 的補碼表示

在沒有「L」後綴的情況下,如果整數相乘的結果為負且超出整數範圍,則在分配給整數變數之前將其轉換為2 的補碼表示形式。此轉換可確保負值可以在整數範圍內表示。

確保正確的結果

要獲得正確的結果,必須聲明數值透過附加「L」來超出整數範圍的長整數值,以確保正確的表示並避免截斷或轉換為2 的補碼表示。

以上是為什麼在 Java 中向數值添加“L”會大大改變乘法運算的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn