algorithm - 修改布斯算法中 LSB 添加的额外 0 有何作用?

标签 algorithm bit extra lsb

我试图找到这个问题的答案,但关于它的唯一其他线程没有提供我希望的那么多细节。

为什么修改布斯算法中需要在LSB右侧额外加0?

它到底有什么作用以及为什么它需要为 0 而不是 1?

我知道在 Radix-4 Modified Booth 算法(或一般的 iirc)中,您的输入需要偶数位,并且它使用 3 位来决定必须执行什么操作,例如添加 2*被乘数。

但是添加的 0 不能只存在,这样我们就有了一个可以被 3 整除的位长度,对吗?

最佳答案

假设我们必须乘以A×B,其中B=(bn-1 ... b1 b 0)
Booth,在其标准或修改版本中,通过重写术语bi来工作。

让我们看看更简单的标准展位。
如果重写后 B保持不变,则重写是正确的。
如果B以二进制补码编码,则其值为
B=−bn-1×2n-1i=0n-1bi×2i
请注意,由于二进制补码编码,权重 n-1 处的负数。

现在重写包括将每个 bi 更改为 b'i=bi− bi-1
如果我们现在这么说
B=Σi=0n-1b'i×2i
b'i 替换为 bi−bi-1 在这个表达式中,B 的值不变,假设对于 i=0,我们添加一个额外的位 bi-1 =0

当然,我们可以为i=0添加特殊规则:
如果i≠0b'i=bi−bi-1>
否则b'i=bi
但是 Booth 算法的主要最初动机是用正则表达式替换二进制补码中权重为 n-1 的负号的特殊情况,其中所有位都被相同地处理独立于
事实上,在设计电路时,仅复制一个运算符比根据位位置考虑特定条件要容易得多。因此,最好的解决方案是在 LSB 处添加一个额外的位。

对于 retrofit 展位,情况类似。
我们尝试用数字b''2i重写b
B=Σi=0n/2-1b''2i×2 2i
重写以 4 为基数,表达式更加复杂,要生成数字 b'',我们需要考虑位 b2i+1、b< sub>2i 和 b2i-1

这是相应的真值表。

b_2i+1    b_2i    b_2i-1   |    b''_2i
-----------------------------------
0         0       0        |    0
0         0       1        |    1
0         1       0        |    1
0         1       1        |    2
1         0       0        |   -2
1         0       1        |   -1
1         1       0        |   -1
1         1       1        |    0

可以证明,这样,B的数值不变,假设我们在权重-1处的0处添加了一位b-1=0。实际上,b''2i=−2×b2i+1+b2i+b2i-1 并且可以替换 if 表达式 B=Σi=0n/2-1b''2i×2 2iB 的二进制补码值。
同样,我们可以不同地考虑 i=0 的情况,并说 b''0=−2×b1+ b0,但这会增加额外的复杂性。

回答你的问题:

Could anyone tell me why the extra 0 to the right of the LSB is needed in Modified Booth Algorithm?

这个额外的位简化了重写算法,并避免在 i=0 时处理特定情况

What exactly does it do and why does it need to be 0 and not 1?

如果该位为 1,则重写后 B 的值无法保持不变。这对于确保乘法算法的正确性至关重要。

关于algorithm - 修改布斯算法中 LSB 添加的额外 0 有何作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56826426/

相关文章:

c++ - 我的编程面试题: Reverse a string and find the mode of an array

algorithm - 在列表中查找重复组合

c - 额外的错误?他们在哪里、是什么? C语言编程

c - 从文件中读取位时 `16 longs` 和 `110 words` 的含义是什么

c - 将 32 位整数移动 32 位

css - Chrome -- CSS -- 额外间距

c++ - new 和 malloc 分配额外的 16 个字节

c++ - 如何在opencv中访问特定的kmeans集群

algorithm - 计算3D中两条线(线段)之间的最短距离

c - 为什么按位除法不像按位乘法那样工作?