2 回答

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

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