定点整数加减法

来源:互联网 发布:冰川网络最新消息 编辑:程序博客网 时间:2024/05/24 01:44

1.补码加法的性质:补码的和等于和的补码。
进行补码加法时,符号位参与运算。最后把超出的进位丢掉。
2.补码减法依然转化为加法来做。一个补码表示的数的相反数,可以“逐位取反再加一”得到。
3.溢出(overflow)检测:正+正<0,或者负+负>0,为溢出。有两种检测方法:
(1)双符号位变形补码法。
n位二进制有符号整数,则结果利用n+1位整数表示。
结果保留两位符号位(第nn+1位),两个符号位不一致 ,则发生了溢出。符号位01则为正溢出,符号位10为负溢出。因为“正+正”,两个加数第n位都不可能为1,最多只能在第n位得到1,因此符号位出现01是正溢出。符号位10同理。

有符号整数的符号位实际是使用的负权,故也影响数的绝对值大小。一般认为最高位是符号位。

(2)单符号位法。
此方法检测最高符号位和最高位产生的进位。是否溢出取决于结果符号位和进位的异或值。

本质上两种方法是一致的。

4.加法器的电路表示可以由n位全加器,n个异或门构成的控制电路(控制做加法还是减法,减法就用异或门全部取反,并给最低位全加器的进位输入设置为1)和一个溢出检测的异或门构成。分析延迟,应该尽可能考虑可以并行的部分。

5.C , Java会忽略溢出,并不会产生异常。如果需要在C中检测溢出,应当考虑实际结果的范围。