定点加法,减法运算
对于数在计算机里的加减法,由于有了补码这个编码之后,其在计算机里的加减法就变得容易许多,毕竟减法用补码处理的时候可以转化为加法解决,这也是为什么不直接用原码处理加减法的一个原因,在这里分别对这两个基础运算作简要说明,好为定点乘除法的说明做好基础:
1,补码加法:
一个式子就可以解决问题—— [ x ]补 + [ y ]补 = [ x + y ]补 (mod 2^(n+1)) …… ①
这个式子的证明很简单,但感觉比较繁琐,可以借鉴《计算机组成原理》这本书,里面有对该式的分类讨论证明,这个式子要注意的地方就是末尾的(mod 2^(n+1)), 式①的成立关键就在于要对2^(n+1)取模,这一点除了在式①的证明之中用到之外,还在用式①计算时产生作用,以下面这个例子说明:
例 1 : x = +1011, y = -0101, 求 x + y。
解 [ x ]补 = 01011, [ y ]补 = 11011
[ x ]补 01011
+ [ y ]补 11011
——————————
[ x + y ]补 100110
注意[ x + y ]补 得出的结果里最左边的1,这个1在(mod 2^(n+1))的条件下是会被省略的,所以此题的结果为 : [ x + y ]补 = 00110,然后符号位为零,故结果为正数,所以 x + y = + 0110 。而且由此我们还可以得出补码加减运算的一个规律那就是符号位产生的进位是要直接省去的。
2,补码减法 :
也是一个式子解决问题—— [ x - y ]补 = [ x ]补 -[ y ]补 = [ x ]补 + [ -y ]补…… ②
[ - y ]补 = 乛 [y]补 + 2^(-n) …… ③ (符号乛 表示对[y]补 作包括符号位在内的求反操作,+ 2^(-n)表示最末尾加1)
式③是求式②的关键,这样就可以在知道两个数补码的条件下做两个数的减法运算,而且式②③也是要在(mod 2^(n+1))的情况下才能成立的,所以将两个数的补码做减法时符号位上的进位同样要省去。
例 2 : x = +1101, y = +0110, 求 x - y。
解 [ x ]补 = 01101, [ y ]补 = 00110, [ -y ]补 = 11010
[ x ]补 01101
+ [ - y ]补 11010
——————————
[ x - y ]补 100111
故: x - y = + 0111
3,加减运算溢出:
定点运算值是有范围的,运算结果超出范围就是溢出,对于溢出有正溢出和负溢出两类,并在此强调一下判断的溢出的两类常用方法:
① 变形补码法:之所以称之为变形补码,其实就是在原先只有一位标记符号位的基础上在加一位标记符号位,那么正数的符号位00,负数的符号位为11,在进行补码加减法运算时两个符号位均要参与运算,若结果的符号位为01,则发生正溢出,为10则发生负溢出,其他情况则没有溢出。但无论最后结果的符号位是多少,真正的结果符号一定与最高符号位表示一致,下面两个例子是以用变形补码表示法来进行加法运算的:
例 3 : x = +1100, y = +1000, 求 x + y。
解 [ x ]补 = 001100, [ y ]补 = 001000
[ x ]补 001100
+ [ y ]补 001000
——————————
[ x + y ]补 010100
结果符号位为01,故发生正溢出,但结果正确符号位与最高符号位一致,即0故结果应为正数。
例 4 : x = -1100, y = -1000, 求 x + y。
解 [ x ]补 = 110100, [ y ]补 = 111000
[ x ]补 110100
+ [ y ]补 111000
——————————
[ x + y ]补 101100
结果符号位为10,故发生负溢出,但结果正确符号位与最高符号位一致,即1故结果应为负数。
所以在计算机中可以通过V = Sf1 ⊕Sf2,来判断是否发生溢出,若v为1,则溢出,否则未溢出。其中Sf1和Sf2分别表示最高符号位和第二符号位。(⊕表示异或运算)
②单符号位法,从以上两个例子可以看出,当最高数值位产生进位,而符号位没产生进位时,产生正溢出,当最高数值位没进位,而符号位进位时,产生负溢出,故可用V =cf ⊕c0 来判断是否运算发生溢出,其中cf为符号位进位,c0为最高数值位进位。V为1表示发生溢出,V为0表示未发生溢出。
4,行波进位的补码加/减法器:
说到行波进位的补码加/减法器,我们先可以从一位全加器开始讨论,假设Ai,Bi, Ci 分别表示当前位的两个加数,以及前一位进位到当前位的进位,Si为和,C(i+1)为进位到下一位的进位,那么可以得到所有情况下各变量的取值表,即它们的真值表:
所以可以由此得到逻辑表达式:
Si=Ai⊕Bi⊕Ci
Ci+1=AiBi+BiCi+CiAi
故由此可以得到一位全加器的逻辑电路图:
再由此就可以得出行波进位的补码加/减法器的逻辑电路图:
这张图的总控线是M,M=0时,做加法运算,M=1时,做减法运算。其中FA是一位全加器,当M=0时,Bi与M的异或值就是M,所以全加器的输入就是A和B,当M=1时,Bi与M异或就是对Bi取反,然后C0=M=1,所以整个运算就是对B取反加1,是不是很熟悉,对,,,就是在上文中补码减法里的[ - y ]补的求法,所以当M=1时,这个加法器执行的是A补 + [ - B ]补,即A-B的补码减法运算,所以只要改变M的取值就可以操作是做加法还是减法了,最后要补充的是这个加法器判断溢出方式是采取单符号位法,把最高数值位的进位和符号位的进位同时输入到一个异或门进行异或运算,然后根据结果判断是否溢出。先总结这么多,,,,这样再理解定点乘法应该要容易的多吧~~~~~