理解數值差異
在提供的程式碼片段中,兩個乘法運算之間的明顯差異源於缺少或存在附加到數值後的「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中文網其他相關文章!