计算机中二进制数乘法运算

引言

计算机组成原理中的基本知识,感觉有点绕,做个记录。

一般乘法运算

-1101 X 1011为例

     -1101
     x1011
  --------------
      1101
     1101
    0000
   1101
-----------------
 0.10001111

计算机进行像这样的乘法运算有两大困难:一是将四个位积一次相加,机器难以实现;而是乘积位数增长了一倍,会造成器材浪费和运算时间增加。
所以计算机中对乘法运算进行了改进:

  • 我们把乘法运算时中间值称为部分积,如:1101, 1101和下面的1101加和而成的100111。
  • 乘法运算可用移位和加法来实现,可以看到,本例需要进行四次乘法运算和四次加法运算(第一次乘完后看做与0000相加),每次加法运算时上面数的最后一位总是不参与运算,所以我们可以在每次运算后把最后一位存起来,每次做加法时只与原部分积的高位相加。
  • 被乘数与原部分积相加,然后右移一位形成新的部分积,同时,乘数也右移一位,由次低位作新的末位空出最高位放部分积的最低位。
  • 每次做加法时,被乘数仅仅与原部分积的高位相加,其低位被移至乘数所空出的高位位置。
    计算机很容易实现这种运算规则。用一个寄存器存放被乘数,一个寄存器存放乘积的高位,另一个寄存器存放乘数及乘积的低位,再配上加法器及其他相应电路,就可组成乘法器。又因加法只在部分积的高位进行,故不但节省了器材,而且还缩短了运算时间。

具体运算过程

还是以-1101 X 1011为例,采用双符号位
补码 -1101:11.0011; 1011:00.1011

部分积 乘数 说明
00.0000+11.0011=11.1001 1011 乘数为1。
11.1001+11.0011=10.1100 1101 乘数为1;计算前部分积为11.1001,末位为1,将乘数右移然后前面补1,然后再将部分积右移一位再进行运算。
11.0110+00.0000=11.0110 0110 乘数为0;部分积直接右移作为计算结果,乘数右移,补上上个部分积的末位
11.1011+11.0011=10.1110 0011 乘数为1;计算前部分积为11.0110,末位为0,将乘数右移然后前面补0,然后再将部分积右移一位再进行运算。

将10.1110右移一位然后接上乘数得11.01110001
原码:1.10001111
原文地址:https://www.cnblogs.com/knightoflake/p/15252244.html