两个二进制带符号数相加时通常采用变形补码,即双符号位补码,有利于检测溢出。
带符号数的算数移位规则:(数的符号不变!!!)
原码:
正数:左移右移都补0
负数:左移右移都补0
补码:
正数:左移右移都补0
负数:左移补0,右移补1
定点乘法运算
1.原码一位乘法
X , Y是两个n位(除符号位以外)二进制数
利用三个寄存器A、B、C
A:初值为零,并存放结果的高位部分
B:存放|X|
C:存放|Y|和结果的低位部分
步骤:
(1)取X,Y的绝对值|X|,|Y|
(2)Cn=
- 1 ——+|X|
- 0 ——+0
(3)部分积右移一位
(4)重复(2)、(3)n次
2. 补码一位乘法
A:初值为零,并存放结果的高位部分
B:存放X补码
C:存放Y补码和结果的低位部分
(1)补码表示X,Y
(2)符号位参加运算
(3)乘数最低位后面加一位附加位,为0
(4)(n+1)次累加,n次移位
CnCn+1= 01 +[X]补,右移一位
10 +[X],右移一位
00或11 只右移一位
定点除法运算
1. 原码加减交替法(不恢复余数法)
3个寄存器:
A:存放被除数X 和中间过程中产生的余数
B:存放除数Y
C:存放商,初值为0
步骤;
(1)被除数-除数
(2)余数的符号
- 正 商1,余数左移一位,减除数(+【-Y】补)
- 负 商0,余数左移一位,加除数
(3)重复(2)n+1次,若(n+1)次的余数为负数,则进行第(n+2)次,只+|Y|
2. 补码除法运算
寄存器的存放同上
步骤:
(1)被除数与除数 同号 被除数减除数
异号 被除数加除数
(2)中间过程余数与除数
- 同号 商1,余数左移一位,减除数
- 异号 商0,余数左移一位,加除数
(3)重复(2),做n+1次加减运算,n次移位。
(4)末位置1
!!!由于每次加减运算以后都要向左移位,所以最后得到的余数是放大了n倍的余数,真正的余数是 计算出的余数 * 2 的负n次幂!!!
最后结果的计算公式:
X/Y = 商 + 余数 / 除数