zoukankan      html  css  js  c++  java
  • 计算机中二进制数乘法运算

    引言

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

    一般乘法运算

    -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
  • 相关阅读:
    Android--将图片存放到我们本地
    Android--将Bitmip转化成字符串
    Android--启动系统的剪切图像功能并返回结果
    Android--从相册中选取照片并返回结果
    Android--启动拍照功能并返回结果
    Android--PullToRefreshListView的onRefreshComplete()不起作用的问题
    Android判断当前的android设备是否处于联网状态
    Android中修改状态栏的颜色和我们App的风格一致
    ListView的多布局中的小问题
    [Android] Activity间切换,传递数据
  • 原文地址:https://www.cnblogs.com/knightoflake/p/15252244.html
Copyright © 2011-2022 走看看