计算机组成原理补码位算法,[计算机组成原理] Booth算法 —— 补码一位乘法

x * y = z

运算规则:

1.和原码一位乘法不同,补码一位乘法的符号位是参加运算的,且运算结果和所有参加运算的数都是补码形式。

2.乘数 x 取双符号位参与运算,部分积的初始值为0;

乘数 y 取单符号位参与运算。

3.乘数 y 首先在末尾添加一个辅助位 0 ,每次讨论都是取 y 的最后两位,但每次移动仅移动一位。

4.判断 y 的最后两位是规则如下:

00或者11时,直接右移一位;

01时,先加x的补,然后右移一位;

10时,先加-x的补,然后右移一位。

5.有个特例,最后一步不用右移了。

举个栗子:

设 x = -0.1101 , y = 0.1011

则 [x]补 = 11.0011 ,[-x]补 = 00.1101

一开始 部分积初始值:00.0000

先给y补一个辅助位0,得到 y = 0.10110

首先,从y的最后两位开始看,0.10110,为 10 ,对应规则“先加[-x]补,再右移一位” :

部分积  00.0000 + 00.1101 = 00.1101 ,右移一位得到 00.01101

接着,y 右移一位再看,0.10110,为 11 ,对应规则“直接右移一位”:

部分积  00.001101

然后,y再右移一位再看,0.10110 ,为 01 ,对应规则“先加[x]补,再右移一位”:

00.001101          部分积

+ 11.0011              [x]补

--------------------

= 11.011001          部分积

部分积 00.001101 + 11.0011 = 11.011001 ,右移一位得到 11.1011001 (注意这里符号位移动后,仍然保持为 11 )

接着,y再右移一位再看,0.10110 ,为 10 ,对应规则“先加[-x]补,再右移一位”:

部分积 11.1011001 + 00.1101 = 00.1000001 ,右移一位得到 00.01000001

最后,y再右移一位再看,0.10110 ,为 01 ,对应规则“先加[x]补,再右移一位”:

部分积 00.01000001 + 11.0011 = 11.01110001 ,但这已经是最后一步,不用再右移了,

所以最后结果是 1.01110001  (注意:这是x*y的补码)

原文:https://www.cnblogs.com/LeoCathyFelix/p/11022465.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值