定点数的乘法运算-----Booth算法(细致讲解带你一次性掌握)

最近几天复习计组的Booth算法,发现很多课程的讲解都有些不到位的地方,本人也是综合了很多课程的讲解以及他们对于Booth算法的运用来讲解Booth算法,我也希望通过我的讲解能带你一次性掌握Booth算法的应用。(注意:这里针对于期末考试做题,并不深究算法的理解

一、例题

话不多说,直接上例题,书本和老师的一些理论介绍总是很让人心生困意,直接跟本人一起来做题提提神。

例: X = -0.1101 , Y = 0.1011。求 X * Y。

1.Booth算法是对于补码的计算,首先先将以上两个数字转化为补码的形式,并且计算X相反数的补码(我知道你不知道为啥要算相反数,但你先别急先算),利用公式-X = ~X + 1(这个公式由X + ~X = -1 推导过来,很好理解,一个数的原码加反码就是全是1,比如1101 + 0010 = 1111 = -1)

得: [X]补 = 1.0011, [Y]补 = 0.1011,[-X]补 = 0.1101

2.我们知道以上标红的数字位为符号位,即表示正负的flag,1为负,0为正。然后我们将符号位扩展为双符号位,让11表示正,00表示负。

得: [X]补 = 11.0011, [Y]补 = 00.1011,[-X]补 = 00.1101

3.我们到目前为止还没进行运算,刚刚做好了准备工作,所以此时的乘积还没开始计算,对于计算机来说此时的结果res = 00.0000。

4.我们以前手算比如20 * 11,实际上后来算的是分部计算各部分乘积后的加法:020 + 200 = 220。如图:

  Booth算法也是通过部分的计算再累加成最终结果的。

5.开始计算,首先给乘数(Y)一个辅助数0添加到末位:Y = 00.10110。从现在开始每次取乘数的从左往右最后两位,现在为第一次所以取10。我们知道首位是符号位,因为首位是1,所以这里表示减(这句话是方便大家记忆的,并非真正的原理,别的版本的理解很多,我觉得这样最好记)

也就是计算机读取到这两位之后自动识别出“减”的意思,则执行“减”的操作,所以此时将res 减被乘数的补码,也就是res 加被乘数相反数的补码(提前算出来过),这里就是res = res + 00.1101。

---> res = 00.1101

然后乘数Y抛弃一位得到00.1011,抛弃一个末位0。而res要右移一位(注意不是被乘数X右移,X是不动的),抛出一个末位的1(这里使用了不同的词,抛弃就是不用管了,抛出就是还要存着)。

---> res = 00.0110    Y = 00.1011(这里比res还多一位就是因为之前补过一个0)

--->thrown = 1

以上5的全过程就是一个循环。中间有一个判断就是乘数Y的末位。

6.再进入循环,判断此时Y的末位为11,Booth算法中如果末位为11或00的成对的数字,那么则直接进行移位,因为res = res + 0。(刚刚的10表示“减”,所以01表示“加”)

--->res = 00.0011(抛出0)   Y = 00.101   thrown = 01

7.依次循环到最后依次可得:thrown = 0001    Y = 00.1   res = 00.0100,此时进行最后一次循环,不用管小数点,过了小数点也就表示最后一次循环了, 此时末位为01,所以进行加运算,那么就是res = res + [X]补 = 00.0100 + 11.0011 = 11.0111。最后一次循环不进行移位操作!

8. 最终的结果就是res的值后面补上res抛出过的部分即thrown,即res = 11.01110001(标红的是thrown部分)

9.将双符号位改回带单符号位,所以[X * Y]补 = 1.01110001,所以X * Y = 0.10001111。

以上就是Booth算法的全过程了。

二、计算过程展示

三、提醒

另外我还要提醒一下,小数点只是约定好的位置,并不影响计算,比如你取反加1的时候加的1直接加到末位就行了而不是在小数点之前加1。

并且把res抛出的数添加到thrown是在左边添加!

那么以上就是我对于Booth算法的讲解了,希望你能够通过仅此一篇就能够掌握Booth算法的运算!

  • 30
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值