2 回答

TA貢獻1946條經(jīng)驗 獲得超3個贊
是的,通常加 1Integer.MAX_VALUE
會導致溢出,從Integer.MIN_VALUE
. 但這不是這里發(fā)生的事情。
此代碼執(zhí)行整數(shù)除以10
,這會截斷任何小數(shù)部分。將Integer.MAX_VALUE
( 2147483647
) 除以 10 時,代碼預期乘以 10 并添加下一個數(shù)字。該商是214748364
,乘以10
是2147483640
,有可能再加上另一個 7 而不會溢出。同樣在負數(shù)方面,將Integer.MAX_VALUE
( -2147483648
) 除以 10 產(chǎn)生-214748364
,乘以 10 產(chǎn)生,有可能在不溢出的情況-2147483640
下添加另一個。-8
此代碼考慮了值范圍極值的最后一位,Integer
并小心避免溢出。

TA貢獻1789條經(jīng)驗 獲得超8個贊
Integer.MAX_VALUE
是2147483647
這意味著:Integer.MAX_VALUE/10
是214748364
你將要做:rev = rev * 10 + pop
所以 if rev > 214748364
, thenrev * 10
會導致溢出。
或者 if rev == 214748364
, thenrev * 10
是2147483640
,并且rev * 10 + pop
會導致溢出 if pop > 7
。
添加回答
舉報