如果一直都是一位的乘法的话,很多时候会很慢我们需要加快进度来进行乘法。
假设乘数和被乘数都用原码表示。原码的话,永远需要当成一个正数。
两位乘数有4种可能组合,每种组合对应以下操作。
00 相当于0*X。部分积右移两位即可X
01 相当于1*X。部分积加X然后右移两位即可
10 相当于2*X。部分积加2X然后右移两位即可
11 相当于3*X。部分积加3X然后右移两位即可
我们加X直接加就行,2X也就是将X左移一位再相加即可。
但是我们3X不可以一步到位我们需要将3X转换成4X-X这样的形式。在这一步我们只进行-X的操作然后在下一步操作中由于部分积已经进行了右移两位的操作所以我们只需要进行加X即可以相当于加4X的操作。所以我们需要找一个触发器C来记录这个4X是否欠下了当欠下了C置为1反之为0。
具体规则如图:
例题:
X=0.100111,Y=0.100111 则:[-X]补=1.011001 求X*Y
部分积 乘数 欠位C
000.000000 1001 11 0
+[-X]补111.011001
111.011001
右移两位 111.110110 0110 01 1
+2X 001.001110
001.000100
右移两位 000.010001 0001 10 0
+2X 001.001110
001.011111
右移两位 000.101111 110001 0
这样就结束了最终结果为 X·Y=0.010111110001
如果最后一次操作欠下+4X,则最后一次右移2位后还需补充+X操作,+X后不再移位 。