规律:计算时左移就是右移!加法就是减法!
原码运算符号位异或得出,补码运算符号位运算自然形成;
乘法部分积左移,除法部分积右移
多符号位最高位表示正负,其他位可判断溢出
开始时部分积为0
原码乘法(符号位异或得出,右移)
-
原码一位乘(一符号位)
分析笔算乘法过程
把乘法变拆成加法和移位
符号位取一位
最终数符由运算数字符号异或得出 -
原码二位乘(三符号位)
思路和原码一位乘相同,但每次取乘数末两位判断操作,每次移两位,总体上运算速度比原码一位乘快
运算时部分积符号位取三位(运算过程中可能会大于2)
引入Cj位,用y(n-1),y(n),Cj三位共同判断下一步操作
注意y(n-1)y(n)为“11”时,用先减1倍后加4倍代替加三倍操作
注意Cj=0/1时操作的循环变化,留意什么操作会重置Cj值
乘数为奇数在前加0,为偶数加00(两位乘,保证位数为2^n,同时运算结束后保证Cj置0) ,最后一步和附加的00运算时不要移位了!!
补码乘法 (运算过程中形成符号位,右移)
- 补码一位乘(双符号位)
1)乘数为正数,被乘数符号任意
按照原码一位乘规则运算
2)乘数为负数,被乘数符号任意**(校正法)**
先忽略乘数符号,按原码一位乘运算,最后再加上[-1*被乘数] (补)
3)两数字符号均任意**(Booth算法)**
可由前两种方法导出,增添一项y(n+1)=0,计算从y(n),y(n+1)……
y(0),y(1)前后两项之差,来决定采取什么加操作 - 补码两位乘(三符号位)
采用Booth算法,一次看三位y(n-1),y(n),y(n+1),两次一位乘操作之和累加
原码除法(绝对值计算,符号位异或得出,左移)
-
要点在于判断够不够除,每次应该商0还是商1
1)恢复余数法
一开始先减除数绝对值
余数为正,商1(够减);
余数为负,商0(不够减),额外加上除数绝对值;2)加减交替法法
恢复余数法改进,隐藏余数恢复过程
不论余数,首先左移
然后若余数>0,商1,减除数绝对值
若余数<0,商0,加除数绝对值
补码除法(符号位自动形成)
- 判断够不够减,考虑被除数和除数符号差异,同号减,异号加;
- 上商时,先左移
余数和除数同号商1,减除数(补码)
异号商0,加除数(补码)