Booth算法为什么是对的

关于Booth算法是什么,以及怎么用,可以参考以下这篇文章。本文的重心在于解释为什么Booth算法是对的,它的原理是什么。注意,本文不涉及数学推导,但是需要熟悉在计算机组成原理中的乘法运算。

 https://blog.csdn.net/qq_44840079/article/details/104790338

(PS:本文创作的初心是因为发现没有在CSDN和B站上找到快速讲懂该问题的文章和视频,推导的原理纯粹是本人中午没睡着,突然想明白的)

————————

正文开始:

  7 X 3

= 0111 X 0011

= 0111 X (0100 - 0001)

= 0111 X 0100 - (0111 X 0001)

= 0111 X 0100 + 1001 X 0001 (这里变换的原因是将 -0111 通过补码 写成了 1001)

我们从这里就能看到为什么Booth算法中一会要加被乘数(7)的原码,一会要加被乘数的补码了。因为我们用减法的方式表示了乘数(即 3 = 4 - 1)。

所以其实我们的问题回到,什么时候要加原码,什么时候要加补码。

我们从0111 X 0100 + 1001 X 0001 可以知道应该在乘数(3)的第零位(从右往左)加反码,在第二位加原码。那么我们怎么从3的二进制表示0011知道最后是在第零位加反码,第二位加原码呢?

Booth算法给出的是,在0011右边添一个虚假位0。即0011.0,此时右边两位是10,要加反码;右移后位0001.1,右边两位是11,不变,继续右移;变成0000.1,右边两位是01,要加原码。

(所以右边添一个0,和01,10这些都是为了运用这个规则,达到这个目的而创造出来的一个刚好合理的方法)

综上,Booth算法给出的10,01,00,11的编码规则,实际上为了让我们知道,哪个1是正的,如我们的0111 X 0100中 0100的1;哪个1是负的,即0111 X 0010中 0010 中的1.

继续思考后,可以知道负的1总是出现在从右往左,连续的零(或0个零)之后遇到第一个1的位置。正的1总是出现在从右往左,连续的1(最少一个1)之后遇到的第一个0。

这是由减法后的性质来决定的,因为 0110 = 1000 - 0010, 0111 = 1000 - 0001, 0010 = 0100 - 0010.

希望大家能懂!如果大家有疑惑,可以评论区与我联系!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值