一、定点数加减法运算
(在计算机中只要看到加减法运算,一定是利用补码进行运算)
当需要减去一个数X时,可以用加X对应的负数的补码【-X】补来代替。
补码运算的基本规则:
1.运算的各个操作数均补码表示,运算结果仍是补码。
2.符号位与数值位一样参加运算。
补码的溢出检测:
1.两个同号的补码相加,结果的符号改变,说明溢出。两个异号的补码相加结果不会发生溢出。
2.双符号位法:当以双符号位补码运算,运算结果的二符号位相异时表示溢出,相同时表示没有溢出。溢出逻辑表达式为V=S1⊕S2
双符号位:用00或11代表符号位,如果结果变为01或10,说明有溢出,通过高位来判断结果的符号是正是负。01表示溢出,结果的符号为正,10表示溢出,结果的符号为负。
3.单符号位法:最高数值位和符号位都有进位或者都没有进位的时候就没有溢出,当其中有一个有进位另一个没有进位的时候就发生了溢出。溢出表达式为V=C1⊕C2。
二、原码的一位乘法
A=-0.1101,B=0.1011
A*B=-0.10001111
乘数的每一位乘被乘数,类似于十进制的乘法。
乘法的符号位是单独处理的,同号为正,异号为负,也是类似于十进制的乘法。
乘法的改进:
变成加和右移的运算。A*B=A*0.1011=A*(0.1+0.00+0.001+0.0001)
=0.1A+0.00A+0.001A+0.0001A
=0.1A+0.00A+0.001(A+0.1A)
=0.1A+0.01[0*A+0.1(A+0.1A)]
=0.1{ A+0.1[0*A+0.1(A+0.1A)] }
在十进制中,0.1b=2^-1。
所以A*B=2^-1{ A+2^-1[0*A+2^-1(A+2^-1(A+0))] }
乘以2^-1表示右移一位。
一个明显的递推公式:
P‘i+1’=2^-1(P‘i’+A*B‘n-i’)
每一步的迭代过程如下:
- 取乘数的最低位Y‘n-i’判断。
- 若Y‘n-i’的值为1,则将上一步迭代部分积P‘i’与A相加,如果为0,则什么也不做。
- 右移一位,产生本次部分积P‘i+1’
至于除法会在下一篇中讲到。