在硬件电路中,常采用二进制乘法器,因此只讲二进制乘法器的原理。二进制乘法原理与十进制乘法原理类似,都是将乘数的每一位和被乘数相乘,除此之外,二进制乘法还有其自身的特点,这对于硬件设计极为关键。
二进制乘法器可以分为有符号数乘法和无符号数乘法。无符号数乘法较为简单,不需要对乘数和被乘数扩展符号位,直接使用乘数和被乘数相乘相加即可。举例:比如两个无符号数3(011)和6(110)相乘,那结果应该是一个6位的二进制数。过程如下:
0 1 1 (3)
x 1 1 0 (6)
0 0 0
0 1 1
0 1 1
1 0 0 1 0 (18)
可以看到,整个过程是将被乘数进行移位然后再进行相加。乘数的最低为对应移位0位,最高位移位2位,但是应该注意到的是,如果乘数的对应位位0,则可以理解位移位结果为0;所以最终的结果是:000000+000110+001100 = 010010(18)
但是对于有符号数就比较麻烦一些。对于有符号数乘法,乘数和被乘数都是使用补码表示。假定被乘数和乘数的位宽分别为M1和M2 有如下结论:
(1)乘积的位宽是(M1+M2)
(2)乘数和被乘数在相乘前需要进行有符号扩展,将被乘数和乘数扩展至(M1+M2)位
举例:(-3)x(6)
(-3)的补码&