整数加法溢出原理(五)

主要考虑整数加法的溢出情况, 其中:

+ w u +_w^u +wu 表示 w w w 位的无符号加法.

+ w t +_w^t +wt 表示 w w w 位的补码加法.
 

1. 无符号加法

 
对满足 0 ≤ x , y ≤ 2 w 0 \leq x , y \le 2^w 0x,y2w 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+y2w,..................2wx+y2w+1.........
也可以缩减为 x + w u y = ( x + y ) x+_w^u y=(x+y ) x+wuy=(x+y) mod 2 w 2^w 2w .
 

2. 补码加法

对满足 − 2 w − 1 ≤ x , y ≤ 2 w − 1 − 1 -2^{w-1} \leq x , y \le 2^{w-1}-1 2w1x,y2w11 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+y2w,................2wx+y.............................x+y,.......................2w1x,y<2w1..............x+y+2w,................x+y<2w1.......................
也可以缩减为 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 x0 , 则 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 Tminwx,yTmaxw 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 s0 时, 计算 s s s 发生了正溢出 ,
 
   当且仅当 x < 0 , y < 0 x<0,y<0 x<0,y<0 , 但 s ≥ 0 s\ge0 s0 时, 计算 s s s 发生了负溢出 .

你可能感兴趣的:(计算机设计,Java)