我有Leetcode提供的解决方案,而令我感到困惑的部分是,将7(或更低的值)添加到Integer.MAX_VALUE或将-8(或更低的值)添加到Integer.MIN_VALUE不会导致分别上溢或下溢。
我的逻辑是,如果您具有Integer.MAX_VALUE,则加1将导致溢出。并且如果您有Integer.MIN_VALUE,则减1将导致下溢。我对上溢和下溢的理解哪里错了?
recursive_merge_sort
答案 0 :(得分:3)
是的,通常在Integer.MAX_VALUE
上加1会导致溢出,在Integer.MIN_VALUE
上减1也会导致溢出。但这不是这里发生的事情。
此代码正在执行10
的整数除法,该运算将截断任何小数部分。将Integer.MAX_VALUE
(2147483647
)除以10时,代码预期将乘以10并加下一位。该商为214748364
,乘以10
为2147483640
,并且可以加7而不会溢出。同样,在负面方面,将Integer.MAX_VALUE
(-2147483648
)除以10得出-214748364
,再乘以10得出-2147483640
,并可以加上另一个-8
溢出。
此代码考虑了Integer
值范围的极值的最后一位,并仔细避免了溢出。
答案 1 :(得分:2)
Integer.MAX_VALUE
是 2147483647
这意味着:Integer.MAX_VALUE/10
是214748364
您将要做:rev = rev * 10 + pop
因此,如果rev > 214748364
,则rev * 10
会导致溢出。
或者如果rev == 214748364
,则rev * 10
为2147483640
,如果rev * 10 + pop
,pop > 7
将导致溢出。