zoukankan      html  css  js  c++  java
  • 计算机乘法除法原理(原码 转载)

    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
  • 相关阅读:
    8086 CPU 寄存器
    python中 * 的用法
    字典的相应操作
    tesseract学习记录
    C学习之路2012.8.28
    函数库管理
    2013.3.19C++浏览记录。。。
    自动生成makefile文件学习
    整理做过的东西(电子警察)
    基于zed的tesseract移植过程记录
  • 原文地址:https://www.cnblogs.com/wsw-seu/p/8257317.html
Copyright © 2011-2022 走看看