整数溢出

2022-09-22  本文已影响0人  sarto

溢出分为向上溢出和向下溢出,也就是只能发生在符号相同的两个数相加

加法溢出

当 x y 都大于 0 的时候,可能向上溢出
如果 y > MAX_INT - x 说明溢出

当 x y 小于 0 时,可能向下溢出
如果 y < MIN_INT - x 说明溢出

func add(x,y) (rst, overflow)

if x > 0 && y > 0 && y > MAX_INT - x {
  return overflow
}
if x < 0 && x < 0 && y < MIN_INT - x {
  return overflow
}

乘法溢出

和加法溢出同理
大于 0 时 x > MAX_INT / y 溢出
小于 0 时 x < MIN_INT / y 溢出

乘加溢出

  1. 先判断乘法是否溢出
  2. 再判断加法是否溢出

func muladd(a,b,c) overflow

向上溢出的情况
if b > MAX_INT / a overflow a*b > MAX_INT - c overflow

向下溢出的情况
if b < MIN_INT / a overflow a*b < MIN_INT -c overflow

上一篇 下一篇

猜你喜欢

热点阅读