m位数 * n位数 = (m + n - 1)位数—->最少位数 m位数 * n位数 = (m + n)位数—->最多位数

定点数乘法 1.无符号数乘法 无符号数乘法运算用加法和移位运算来实现 2.有符号数乘法 (1)原码表示(符号位与数值位分开求) 1.乘积的符号位由两个乘数的符号位进行“异或”运算得到 2.乘积的数值位为两个乘数的绝对值之积,即执行无符号数乘法 注:在硬件实现中,乘法运算用加法和移位运算来实现

        假设我们实现4位 X 4位 = 8位的乘法器,那么:

        (1)需要一个8位的移位寄存器保存被乘数,他有一个左移的信号输入。

        (2)需要一个8位的乘积寄存器,用来保存运算的结果。

        (3)移位寄存器和乘积寄存器需要进行加法运算,所以需要一个8位的加法器,相加之后存放到乘积寄存器中。

        (4)需要一个4位的乘数寄存器,同时将乘数寄存器的最低位连接右移信号,右移信号除了控制移位寄存器移位,还要控制是否进行加法运算和是否允许乘积寄存器保存当前的结果。
        最后还需要控制自身是否右移位。

    (2)补码表示(符号位参与运算)
        在有符号数的补码乘法运算中,我们需要将被乘数和乘数先转化为补码进行乘法运算。
        注:运算过程中的所有数据均以补码形式呈现。

        符号位也参加运算,在运算过程中要考虑符号位乘上被乘数之后的部分积是正数还是负数。

        注:位数不足时用最高位(即符号位)补齐位数
        注:乘数符号位为1时,计算时将符号位看作-1与被乘数进行计算,得到被乘数相反数的补码

        以上是手动计算补码乘法的过程。


        计算机一般采用Booth算法(补码一位乘法)进行补码乘法运算,采用相加和相减操作计算补码数据的乘积。