研究乘法器的时候看到了Booth算法,搞了半天感觉有一点明白了。分享一下经验。
根据常规的二进制乘法来说 一般是列竖式
可见乘数的1有几个则需要进行几次加法运算。如果有n个1,就需要进行n次加法。如110010*111111
我们可以明显发现111_111=1000_000 - 000_001
所以让110010先乘1000_000 再减去110010*000_001 就可以得到想要的结果。
在booth算法里,检测相邻两位的变化,即是检索相邻1的过程。只需在多个1的上一位减去被乘数,在多个1的下一位加上被乘数,即可实现乘法运算。
这种算法的优点在于可以计算有符号数。
于是我产生了疑问,在booth算法中,如果1不是相领出现的,那么会不会比原来更加复杂呢。
思考了一下
如乘数为10010101.在计算加码的时候产生移位8次,其中 7次相加相减操作,若直接计算则为进行8次移位,其中4次移位并相加。
感觉好像确实提高了计算次数,目前还不太明白这种方式在哪里提高了效率。好像只有特殊情况提高效率?