`
xinklabi
  • 浏览: 1560459 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

计算机是如何计算乘法除法的(实际上都是转换为二进制加法计算)

 
阅读更多

http://blog.csdn.net/blues1021/article/details/42849183

前言

  • 虽然我们在编程语言中可以直接使用+-/,但是对某些要求不能用/的情况下,我们有必要了解一下计算机是怎样完成乘除法的。
  • 首先,我们要明确一下计算机所能完成的最基本操作是:+(-)和左移右移。虽然ISA中一般都有MUL类指令,但是这些经过译码之后最终的元操作还是加法和移位指令。

乘法实现

  • 我们知道在计算机中只有0和1,于是,就有了二进制计数,比如5 = 101. 抽象的说,任何一个数均可以表示为如下式子: 
    这里写图片描述 
    所以其他数乘以X,就变成了如下式子: 
    这里写图片描述 
    这就是计算机做乘法的原理。因为对于计算机而言,左移一位代表乘以2,右移一位代表除以2。所以,对于a乘以x而言,只是将a左移x为1的位并累加即可。

举例说明:5*3

  1. 3=0011(不用分解,计算机就是这么存储的)
  2. 3的第0位1,5左移0位仍为0;
  3. 3的第一位为1,5左移1位为5*2 = 10
  4. 然后将其累加,得到最后结果15.

代码如下:

//没有考虑传入数太大,导致溢出的情况。只做简单说明
int getBits(int num){
    int numLen = 0;
    while(num){
        numLen++;
        num = num>>1;
    }
    return numLen;
}

int getIndexBit(int num,int pos){//获取从右到左的第pos位置的值1/0
    int index = 1<<pos;
    if((num&index)>>pos)
        return 1;
    else
        return 0;
}
int getBit(int num,int pos){//获取从右到左的第pos位置的值1/0
    pos = pos-1;
    return getIndexBit(num,pos);
}
int multi(int multi1,int multi2){
    bool minus = false;
    if(multi2<0){
        minus = true;
        multi2 = -multi2;
    }
    int length = getBits(multi2);
    int index = 0;
    int base = multi1;
    int sum = 0;

    while(index<length){
        int val = getBit(multi2,index+1);
        if(val)
            sum+=(base<<index);
        index++;
    }
    if(minus)
        return -sum;
    return sum;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

除法实现

除法实现起来要比乘法难一点,因此,让我们首先从人的角度来计算一下除法的实现。

人类计算除法

当我们在计算51/3=17,抛开9*9乘法表。

  1. 从被除数的最高位5开始,从0-9选一个数,使得5-i*3>=0且使5-(i+1)*3<0。我们选择了1. 余数为2.
  2. 将余数*10+1=21,继续从0-9中选一个数,使得21-3*i>=0且使5-(i+1)*3<0,我们选择了7.
  3. 由此,我们找到了答案17。

计算机计算除法

计算机计算除法的过程与人类计算的过程很类似,只是选择范围变成了0或1. 
还以51/3为例说明(51:110011;3:11)

  1. 从第一位开始为1,小于11,结果位置0;余数为1
  2. 从第二位开始,余数*2+1=11,等于11,结果位置1,余数为0;
  3. 从第三、四位开始,余数*2+0=0<011,结果位置0,余数为0
  4. 从第5位开始,余数*2+1=1<11,结果置0,余数为1
  5. 从第6位开始,余数*2+1=11=11,结果置1,余数为0.

此时将结果位相连,恰好是10001(17)

 

 

乘法:被分解为左移累加。

除法:被分解为右移累减去,减法可以转换为加法。
浮点数的运算:
S x 2(^F) x M
浮点数是原码表示法,S符号位,F阶码 + 127, M尾数舍弃前面的1(如果F<=-127则小数最前是0也要舍弃,后面补上0,F会变为-126)。
F阶码用的表示法是偏移码(无符号整型表示,并不是书本说的移码,阶码加减运算的时候,应该用了寄存器处理,不是移码运算,因为位数都不够)。
浮点数加减:阶码对齐; 尾数加减,处理溢出,规格化即可。
浮点数乘除:无符号阶码偏移码加减运算,应该是转换为真值后,进行了有符号补码的运算,得到结果,而不是进行了移码的运算(因为移码运算得不到正确的结果);尾数进行整数乘除,得到结果处理溢出,规格化即可。
 

计算机乘法除法原理(原码)

 (2013-12-04 16:09:30)
转载
标签: 

计算机

 

乘法

 

除法

 

原理

 

原码

 

it

分类: 软件技术规范
1.乘法
由于计算机中,所有数值都是用2的N次方来表示的:2^n0+2^n1+2^n2+2^n3+2^n4.....
因此x*y,(x)*(2^n0+2^n1+2^n2+2^n3+2^n4)=(x*2^n0)+(x*2^n1)+(x*2^n2)+(x*2^n3)+(x*2^n4)+......即(x左移n0)+(x左移n1)+(x左移n2)+(x左移n3)+(x左移n4)+......

用15(x)*13(y)来举例,15*13 为1111*1101
a.首先y的最低位为1(2^0),x左移0位得到1111
b.然后y的最低第二位为0,没有2^1存在,因此本次无运算(结果可以看作为0)
c.然后y的最低第三位为1(2^2),x左移2位得到111100
d.然后y的最低第四位为1(2^3),x左移3位得到1111000
e.把a、b、c、d的结果相加1111+0+111100+1111000=11000011(195),该结果就是乘法的结果

特别的,x*y中,如果y是2的N次方,因此相当于x右移N位。

2.除法(加减交替法)
x/y其实就是,x不断减y的过程。小学时候学的长长除法就是这个原理。
用二进制的除法x/y,比十进制容易写,商不是0即是1,而且如果除数大于除数的1倍,商就是标记在另一个位上面了

二进制除法x/y=0.1001/0.1011手工计算如下
            0.11  
       _______
0.1001/0.1001
         10010(后面补0)
         -1011
        ------
           111(余数)
           1110(后面补0)
          -1011
        --------
              1(余数)
              
设ri表示第i次运算后所得的余数,则:
若ri>0,则商1,余数和商左移1位,再减去除数,即ri+1=2ri-y
若ri<0,则商0,余数和商左移1位,再加上除数,即ri+1=2ri+y

用85/6来举例,85/6=1010101/110
a.101(0101)左移1位到第3位都小于110,因此商=000
b.1010(101)左移四位是1010,比110大,商=0001,余数=1010-110=100(101)
c.余数100(101)左移一位是1001,比110大,商=00011,余数=1001-110=11(01)
d.余数11(01)左移一位是110,等于110,商=000111,余数=0(1)
e.余数0(1)左移一位是01,小于110,商=0001110,余数=01

因此85/6=1010101/110=0001110,即14,余数为最后的余数1
分享到:
评论

相关推荐

    c语言课程设计二进制计算器

    简单的c语言课程设计二进制计算器,可以实现简单的二进制加法、减法、和乘法(不包含除法)。

    唐朔飞计算机组成原理答案完整版

    MQ:Multiplier-Quotient Register,乘商寄存器,乘法运算时存放乘数、除法时存放商的寄存器。 X:此字母没有专指的缩写含义,可以用作任一部件名,在此表示操作数寄存器,即运算器中工作寄存器之一,用来存放操作...

    整数运算_atom_整数运算_

    计算机程序模拟,程序只可用无符号整数类型unsigned ...word madd(wordword):二进制所表示数的加法。word msub(wordword):减法。word mmul(wordword):乘法。word mdiv(wordword):除法。word mmod(wordword):取余。

    数据结构课程设计-大数运算-实现大数加法、大数减法、大数乘法、大数除法、大数乘方、大数取模、同时支持十进制大数和二进制大数运算

    程序源代码以及必要文件.rar

    高精度长整数运算库 长整数除法 与 取模运算 效率 与 乘法相当

    长整数的四则运算, ...除法运算中没有用到减法与乘法,只有加法和二进制移位运算 资源中包含: bignum.h bignum.lib bignum.dll 以及一个测试的函数: test.cpp 测试时,连接所提供的动态链接库!!

    使用C语言实现简单计算器

    除法:计算两个数相除的结果 • 科学模式 正弦:计算这个数的正弦 余弦:计算这个数的余弦 正切:计算这个数的正切 指数:计算指数的结果 对数:计算对数的结果 阶乘:计算这个数的阶乘 倒数:计算分数的倒数 平方:...

    BaseSimulator:二进制模拟器和导师

    BaseSimulator 一个二进制模拟器和辅导员,可以模拟以第二为基础的二进制计算。 它可以用于二进制数的加法,减法,除法和乘法。

    俄罗斯乘法

    俄罗斯乘法是一种计算两数相乘的算法。 我个人的理解该算法是:将一个数以二进制的位权展开形式来表达后,再乘以另一个数。...首先用短除法将10的二进制形式表达出来1010, 现在俄式乘法是将 ( 1×23+0×22+1×21+

    组成原理课程设计代码——完整版

    〈2〉多位二进制加法器 下载到实验箱上,在实验箱上验证。 必做 设计 专业基础 计算机组成原理实验箱30台 P4计算机60台 硬件基础实验室 3 多路开关,逻辑运算部件,移位器设计 在本次实验中,完成多路开关、逻辑...

    cal_二位十进制计算器设计_源码

    1、 输入流程:在没有按键的时候,显示管显示为“0”;首先输入第一个二位十进制数M1,若是一个一位十进制数,LED显示管会显示“07”;...2、 加法功能:3、 减法功能:4、 乘法功能:5、除法功能:6、复合运算:

    华中科技大学计算机学院数字电路与逻辑设计实验电路文件.zip

    华中科技大学计算机学院,数字电路与逻辑设计,包含6次实验的内容:二进制加法器,实验室门禁系统,乘法器,除法器,多功能电子钟,斐波那契计算器。请甄别后下载。

    华科数字电路实验Logisim工程文件

    华中科技大学计算机学院,数字电路与逻辑设计,包括六次实验的工程文件:二进制加法器,实验室门禁系统,乘法器,除法器,多功能电子钟,斐波那契计算器。

    字节快速编辑工具

    这是一款对二进制文件进行反...二进制有其自身的一些运算,如与、或、非、与或、与非,不过都是以加减乘除法为基础的。与就是乘法,1与1即1x1=1,结果就是1, 1与0即1x0=0,或则是加法,1或0即1+0=1,非就是取反,非1即0

    算法心得:高效算法的奥秘(原书第2版).[美]Henry S.Warren,Jr(带详细书签).pdf

    10.23 用电路计算除数为3的除法 241 10.24 习题 242 第11章 初等函数 243 11.1 整数平方根 243 11.1.1 用牛顿法开平方 243 11.1.2 二分查找 246 11.1.3 硬件算法 247 11.2 整数立方根 249 11.3 求整数幂 250...

    Math_Camera_FX_Calculator_991_Solve_Taking_Photo_Premium_v4.4.3.apk

    基本计算器可以执行加法运算,乘法运算,减法运算和除法运算。我们还提供百分比计算,您可以使用方括号来计算优先级内容。在计算时,您将看到即时的数学答案。并且有一个游标供您更正公式中的错误。它实际上是一个比...

    福师《计算机组成原理》在线作业二-0004.268415.doc

    A:16种算术运算功能 B:16种逻辑运算功能 C:16种算术运算功能和16种逻辑运算功能 D:4位乘法运算和除法运算功能 答案:C 计算机执行乘法指令时,由于其操作较复杂,需要更多的时间,通常采用____________ 控制方式。...

    汇编语言指令系统、伪指令

    二进制加法指令 ADD、ADC 加1指令INC 二进制减法指令 SUB、SBB指令、CMP、DEC、NEG 二进制乘法指令 MUL、IMUL 二进制除法指令 DIV、IDIV指令 十进制算术运算 非压缩BCD码调整指令AAA、AAS、...

    HT MCU 加、减、乘、除法

    本程序包含八位、十六位、二十四位及三十二位定点数据的基本运算。 基本的运算包括:加法(有符号、无符号)、减法(有符号、...符号)、除法(有符号、无符号)、BCD 码的加、减法、BCD 码与二进制码的相互转换等等。

    vc.rar_三角函数_取反_时反

    1) 具备十进制输入(0、1、2…8、9),扩展十六进制运算符(A、B…E、F),具备基本的运算功能,包括加法、减法、乘法、除法、取反,具备小数运算; 2) 三角函数运算,(反)正弦、(反)余弦、(反)正切、(反)余切; 3) ...

    ACM 内部预定函数

    2.返回x的二进制表示中从低到高的第i位 3.模取幂运算 4.求解模线性方程 5.求解模线性方程组(中国余数定理) 6.筛法素数产生器 7.判断一个数是否素数 8.求子距阵最大和 9.求一个数每一位之和 10.质因数分解 11.高斯...

Global site tag (gtag.js) - Google Analytics