主要考虑整数加法的溢出情况, 其中:
+ w u +_w^u +wu 表示 w w w 位的无符号加法.
+ w t +_w^t +wt 表示 w w w 位的补码加法.
对满足 0 ≤ x , y ≤ 2 w 0 \leq x , y \le 2^w 0≤x,y≤2w 的 x x x 和 y y y 有:
x + w u y = { x + y , . . . . . . . . . . . . . . . . . . . . . . . . . . x + y < 2 w . . . . . . . . . . . . . . . . . . . . . 正 常 x + y − 2 w , . . . . . . . . . . . . . . . . . . 2 w ≤ x + y ≤ 2 w + 1 . . . . . . . . . 溢 出 x+_w^u y= \begin {cases} x + y , ..........................x+y<2^w .....................正常\\ x+y-2^w,..................2^w \leq x+y \leq 2^{w+1}.........溢出\\ \end{cases} x+wuy={x+y,..........................x+y<2w.....................正常x+y−2w,..................2w≤x+y≤2w+1.........溢出
也可以缩减为 x + w u y = ( x + y ) x+_w^u y=(x+y ) x+wuy=(x+y) mod 2 w 2^w 2w .
对满足 − 2 w − 1 ≤ x , y ≤ 2 w − 1 − 1 -2^{w-1} \leq x , y \le 2^{w-1}-1 −2w−1≤x,y≤2w−1−1 的 x x x 和 y y y 有:
x + w t y = { x + y − 2 w , . . . . . . . . . . . . . . . . 2 w ≤ x + y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 正 溢 出 x + y , . . . . . . . . . . . . . . . . . . . . . . . − 2 w − 1 ≤ x , y < 2 w − 1 . . . . . . . . . . . . . . 正 常 x + y + 2 w , . . . . . . . . . . . . . . . . x + y < − 2 w − 1 . . . . . . . . . . . . . . . . . . . . . . . 负 溢 出 x+_w^t y= \begin {cases} x + y -2^w, ................2^w\leq x+y .............................正溢出\\ x + y , ....................... -2^{w-1} \leq x , y < 2^{w-1} ..............正常\\ x+y+2^w,................x+y < -2^{w-1}.......................负溢出\\ \end{cases} x+wty=⎩⎪⎨⎪⎧x+y−2w,................2w≤x+y.............................正溢出x+y,.......................−2w−1≤x,y<2w−1..............正常x+y+2w,................x+y<−2w−1.......................负溢出
也可以缩减为 x + w t y = U 2 T w [ ( x + y ) x+_w^t y=U2T_w[(x+y ) x+wty=U2Tw[(x+y) mod 2 w ] 2^w] 2w] .
注意:
1. 已知 ∣ x ∣ < 2 w |x| < 2^w ∣x∣<2w, 若 x ≥ 0 x\ge0 x≥0 , 则 x x x mod 2 w 2^w 2w = x x x, 若 x < 0 x<0 x<0 , 则 x x x mod 2 w 2^w 2w = x + 2 w x+2^w x+2w.
2. 对满足 T m i n w ≤ x , y ≤ T m a x w Tmin_w\le x,y \le Tmax_w Tminw≤x,y≤Tmaxw的 x , y x,y x,y , 令 s = x + w t y s= x+_w^ty s=x+wty ,
当且仅当 x > 0 , y > 0 x>0,y>0 x>0,y>0 , 但 s ≤ 0 s\le0 s≤0 时, 计算 s s s 发生了正溢出 ,
当且仅当 x < 0 , y < 0 x<0,y<0 x<0,y<0 , 但 s ≥ 0 s\ge0 s≥0 时, 计算 s s s 发生了负溢出 .