booth算法原理的简单化理解
最近,在学习带符号⼆进制数乘法(multiplication of  signed numbers)时接触到了布思算法(booth algorithm)。由于是第⼀次接触,对于其原理却⼀⽆所知,书上的解释以及⽹上的⽂章不知是⾃⼰才疏学浅还本来就是泛泛⽽谈,没有让我了解其本质。经过长时间的思考分析,最终到了⼀种⽐较简单的理解⽅法。
举⼀个简单的例⼦,⽐如说计算10100001×00111110,在这⾥⾸先将乘数00111110改写为01000000 -00000010
01000000
-      00000010
---------------------------------------------------
001111110
这样根据乘法分配律得10100001×00111110=10100001×(01000000-0000010)
类似于booth算法的重新编码形式,再将上述算式改写为
10100001×00111110=10100001×0+1 000000    +    10100001×000000 -1 0
最终再将上式合并到⼀起,可得由booth算法改写后的编码形式:10100001 × 0+10000-10
由此可见,乘数的数段"01"可以重新编码为“+1”,数段“10”可以重新编码为“-1”,数段“11”可重新编码为“0”
根据⽆符号⼆进制数乘法的过程可知,当乘数段为“00”只是对乘数进⾏了右移操作,故重新编码为“0”
booth算法乘法例题讲解
由于上述推导过程是根据⼆进制数加减以及乘法分配律推导⽽来的,故对于由补码表⽰的负数乘法同样适⽤
(以上推导难免有误,欢迎交流指正)