精华内容
下载资源
问答
  • 、多项式除法 更为一般性推导,p(X)为被除式,q(X)为商式,r(X)为余式。不妨假设gn-k=1。 若被除式p(X)中Xn-k系数为1,此时q(X)=1;r(X)=p(X)-g(X)=p(X)+g(X) 若被除式p(X)中Xn-k系数为0,此时q(X)=...

    一、多项式乘法

    对于每个组成分量,有如下的实现电路:

    综合来看:

    二、多项式除法

    更为一般性的推导,p(X)为被除式,q(X)为商式,r(X)为余式。不妨假设gn-k=1。
    若被除式p(X)中Xn-k的系数为1,此时q(X)=1;r(X)=p(X)-g(X)=p(X)+g(X)
    若被除式p(X)中Xn-k的系数为0,此时q(X)=0;r(X)=p(X)

    经过一次迭代后,可以将除法结果改写为:

    经过若k次迭代后,可以将除法结果改写为:

    迭代的过程参考下图所示的电路:

    寄存器初始值为0,按照顺序依次送入m(X)的信息比特。
    m(X)每送入1bit,和上一次的余式r(X)X一起重新计算Xn-k的系数。
    根据Xn-k的系数,计算得到新的q和r(X)。
    迭代k次后,关闭门控,将计算得到的r0(X)和m(X)中次数小于Xn-k的部分相加后输出。

    展开全文
  • FPGA 二进制小数的乘法和除法 FPGA 二进制小数的乘法和除法
  • 为什么二进制除法可以转换成移位运算呢? 如: a=5; a=a*9; 可以转换成a=(a a=a*7 可以转换成a=(a a=a/12; 可以转换成 a=(a>>4)-(a 因为乘除减法都能转换成移位加法运算,所以cpu中只需要一个...

    为什么二进制乘除法可以转换成移位运算呢?
    如:
    a=5;
    a=a*9;
    可以转换成a=(a<<3)+a; 这样就转换成了移位运算和加法运算
    a=a*7
    可以转换成a=(a<<3)-a;
    a=a/12;
    可以转换成 a=(a>>4)-(a<<2) 这样就转换成了移位运算和减法运算

    因为乘除和减法都能转换成移位和加法运算,所以cpu中只需要一个加法器便能完成所有运算。

    展开全文
  • 本文包括4位二进制乘法(4位乘4位)8位二进制除法(8位除4位)详细计算过程。 1.创作原因 计组实验中涉及到此问题,当时上网查阅了许多博客资料都没能理解这两者计算过程,因此想写一篇博客为后来者提供...

    0. 问题描述

    本文包括4位二进制乘法(4位乘4位)和8位二进制除法(8位除4位)的详细计算过程。

    1.创作原因

    计组实验中的涉及到此问题,当时上网查阅了许多博客和资料都没能理解这两者的计算过程,并且我发现许多资料上的计算过程显得非常繁琐、晦涩,明明两三句话就可以讲明白的东西偏要说的不明不白,细节的地方忽略,计算过程示例也很少且不清楚,导致我遇到了很大困难。后来历经磨难终于理解了这两个计算过程,当时就决心要写一篇博客把这个用最简单但却最详细的话讲清楚,为后来者提供便利,少走一些弯路,多节约一些时间。
    下面我们直接开始吧~

    2.二进制乘法

    被乘数设为5:101B
    乘数设为7:111B

    开始计算之前设置一个变量N保存乘法的最终结果,初始化为0。
    则有详细的计算过程如下:

    1. 判断乘数111B的最后一位为1,则N加上被乘数,N更新为0+5=5
    2. 乘数右移一位更新为11B,被乘数左移一位更新为10
    3. 判断乘数11B最低位为1,则N加上被乘数,N更新为10+5=15
    4. 乘数右移一位更新为1B,被乘数左移一位更新为20
    5. 此时乘数1B最低位为1,则N加上被乘数,N更新为20+15=35
    6. 乘数右移一位更新为0,被乘数左移一位更新为40
    7. 此时检测乘数为0,循环结束,N的最终结果为35,即为乘法的结果

    下面来总结一下整个计算过程的要点:

    • 继续循环还是结束循环取决于什么时候乘数变为0
    • 每一次循环中如果乘数最后一位为1则N加上被乘数;为0则不加上被乘数

    下面再来看一下它的思想是什么:
    我们知道88=164=322=641=648*8=16*4=32*2=64*1=64, 这个乘法的特点就给了我们计算二进制乘法的思路,二进制中左移是乘2,右移是除2,如果被乘数左移乘数右移那么他们的乘积是不变的,即:100B10B=1000B1B=1000B=8100B*10B=1000B*1B=1000B=8。但是如果乘数的末位为1的话不能简单地进行左移右移,设想如果不加处理乘数直接右移那么结果就会丢失掉一个被乘数的大小,这也就是为什么如果判断末位为1结果就要加上一个被乘数的原因。

    8位乘8位的结果需要16位保存,其计算过程也与上方相同,只是需要涉及的寄存器更多,更加复杂一些。

    3.二进制除法

    被除数24:11000B
    除数5:101B

    开始计算前我们设置一个N表示商,其值初始化位0。
    则有详细的计算过程如下:

    1. 将除数的最高有效位左移至与被除数的最高有效位对齐,这里将除数101B左移两位即可,除数更新为10100B
    2. 用被除数11000B减除数10100B,发现减得过来,因为减得过来,所以商+1,商更新为N=1。减法的结果为100B,所以被除数更新为100B
    3. 用被除数100B减除数10100B,发现减不过来,因为减不过来,所以除数右移一位,更新为1010B;因为除数右移一位,所以商左移一位更新为N=1*2=2 (注:左移就是与2做乘法)
    4. 用被除数100B减除数1010B,发现减不过来,所以除数右移一位,更新为101B;因为除数右移一位,所以商左移一位更新为N=2*2=4
    5. 发现现在除数的大小又变回了最开始的大小101B,则循环结束。所以现在的N=4就是除法结果,现在的被除数100B就是除法的余数
    6. 结束,结果正确

    下面来总结一下整个计算过程的要点:

    • 有许多资料可能会设置一个计数器,但我采用的的是另外的方法,和计数器其实是差不多的。除法进行到最终,除数一定要与最开始的除数相等,如果不相等则需要除数一直右移直至相等为止,相应的商也要左移同样的位数(这其实就是整除的情况)
    • 循环继续还是停止取决于除数是否与最开始的除数相等
    • 循环中,用被除数减除数,如果减得过来就用减法结果更新被除数并商+1;如果减不过来除数就右移一位,商左移一位
    • 减不减得过来其实就看在做减法的过程中是否产生借位就可以了,在汇编语言中可以体现为标志位CF是否为1

    下面我再举一个整除的例子:
    被除数8:1000B
    除数2:10B

    计算开始:

    1. 除数10B左移两位,更新为1000B
    2. 被除数1000B减除数1000B,减得过来所以商+1,商更新为N=1;减法的结果为0所以被除数更新为0
    3. 被除数0减除数1000B,减不过来所以除数右移一位更新为100B,因此商左移一位更新为N=1*2=2
    4. 被除数0减除数100B,减不过来所以除数右移一位更新为10B,因此商左移一位更新为N=2*2=4
    5. 此时除数已经等于原来的除数所以循环结束,除法的商为4,余数等于此刻的被除数0
    6. 除法结束,结果正确

    你是否对上面有一点说法有所疑惑?我在上面说到了如果什么时候除数与最开始的除数相等则结束循环,那么肯定有人会想,如果刚开始除数就不需要左移(这个时候被除数与除数位数相同),这时候是不是只进行一次循环就停止呢?

    举一个除数不需要左移的例子:
    被除数14:1110B
    除数9:1001B

    还是设除法的商为N,初始化为0。
    则有详细的计算过程如下:

    1. 除数1001B与被除数1110B最高有效位对齐,所以无需左移
    2. 被除数1110B减1001B,发现减得过来,则商+1,N更新为N=0+1=1;减法结果为101B,则被除数更新为101B
    3. 被除数101B减除数1001B,发现减不过来,再发现此时除数与最开始的除数相等,所以除数无需右移,计算直接结束
    4. N=1为最终的商,被除数为101B则为除法的余数

    那么上面的计算过程需要注意这些地方:

    • 注意你需要在计算的什么地方判断除数是否等于最开始的除数,也就是说你需要明白你应该把判断除数这一过程放在步骤的哪一步才能让计算正确的结束,这需要思考
    • 这个计算过程能够正确计算被除数小于除数的情况

    它的计算思想就不细说了,在上述计算过程中都有所体现。
    我用汇编语言分别实现了这两个计算过程,如下:

    4.汇编实现

    4.1 4乘4乘法

        mov R0, #9
        mov R1, #7
        mov R2, #0
    
        mov A, R0
        and A, R0
        jz OVER;check zero
    LOOP:
        mov A, R1
        and A, R1
        jz OVER;check zero
        and A, #1
        jz TAG2
        mov A, R2
        add A, R0
        mov R2, A
    TAG2:
        mov A, R1
        shr R1
        mov A, R0
        shl R0
        jmp LOOP
    OVER:
        halt 
    

    4.1 8除4除法

            mov R1, #3;除数
            mov R2, #0;商
            mov A, R1
            mov 90, A;把除数存储起来
            
            ;计算计数器的值
    JUDGE_CNT:
            mov A, R1
            and A, #80h
            jz RM;如果是0就左移
            jmp JUDGE_CNT_END
    RM:
            shl R1
            jmp JUDGE_CNT
    JUDGE_CNT_END:
            mov A, R0
            sub A, R1
            jc ADD_BACK_MOVE;不够减加回去,除数右移
            ;够减商加一,被除数更新
            mov R0, A
            add R2, #1       
            
    ADD_BACK_MOVE:;不够减的情况
            ;除数右移一位
            mov A, R1
            sub A, 90
            jz OVER;减到原除数大小结束
            shr R1
            shl R2
            jmp JUDGE_CNT_END
    OVER:
            jmp OVER
    

    4.3 说明

    这两个汇编程序不是8086那套东西所以可能有不一样的地方,不用在意,大家只需要关注其中的计算过程即可。

    5.ending

    若有疑问可以在评论区提出一起来探讨,对你有帮助的话别忘了点赞喔~

    展开全文
  • 比如有两个数字13=(1101),9=(1001),此时计算两者的乘法可以从13的最低位往最高位遍历,如第一个为1,则有1001,第位为0跳过,第三位为1,则再加上1001左移2位即100100,此时结果为101101,最后一位也是1则...

    乘法

    比如有两个数字13=(1101),9=(1001),此时计算两者的乘法可以从13的最低位往最高位遍历,如第一个为1,则有1001,第二位为0跳过,第三位为1,则再加上1001左移2位即100100,此时结果为101101,最后一位也是1则加上1001000,最终结果为1110101=117
    代码demo如下:

    
    public static long multiply(long x, long y) { 
    	long sum = 0;
    	while (x != 0) {
    	if ((x & 1) != 0) {
    		sum = add(sum, y); }
    		X »>= 1;
    		y«= 1; 
    	}
    	return sum; 
    }
    private static long add(long a, long b) {
    	long sum = 0, carryin = 0, k = 1, tempA = a, tempB = b; 
    	while (tempA != 0|| tempB != 0) {
    		long ak=a&k, bk=b&k;
    		long carryout = (ak & bk) I (ak & carryin)| (bk & carryin); 
    		sum |= (ak ^ bk ^ carryin);
    		carryin = carryout « 1;
    		k «= 1;
    		tempA »>= 1;
    		tempB »>= 1;
    	}
    	return sum| carryin;
    }
    
    

    除法

    求x/y,思路是找出满足(2^k)* y < x 的最大k值,并使x减去该值后继续循环直到x<y 即可得到结果

    public static long divide(long x, long y) { long result = 0;
    	int power = 32;
    	long yPower = y << power;
    	while (x >= y) {
    		while (yPower > x) {
    			yPower »>= 1;
    			--power;
    		}
    		result += IL << power;
    		X -= yPower;
    	 }
    	return result;
     }
    
    展开全文
  • 二进制除法乘法原理

    千次阅读 2017-08-29 21:21:43
    以后每计算 x/k 时,就先计算 x∗b乘积,再将乘积右移N位得到结果,这样就把耗时的除法运算变成了一个乘法和一个右移运算。 原理: 下面是一段测试C代码以及编译器生成汇编代码:计算变量
  • 写了三种加法,分别是严格格式(bin_plus_limit),右对齐(bin_plus_right),左对齐(bin_plus_left)。只有严格格式有溢出检测。加法原理都是最基础进位。 减法: 即对减数B补码做加法。调用是右对齐加法。 加...
  • 二进制除法运算2.1 定点除法运算2.2 浮点数运算方法1. 定点数一位乘法定点小数:小数点位置固定于最高位之前。定点整数:小数点位置固定于最高位之后。1.1 定点原码一位乘法计算公式:计算...
  • 二进制除法运算原理

    千次阅读 2020-04-01 16:42:32
    二进制除法原理 计算机所能完成最基本操作是加减法左右移。 虽然ISA中一般都有MUL类指令,但是这些经过译码之后最终元操作还是加法移位指令。 二进制乘法 假设不能使用乘除运算求a×b结果,当a=b=123时...
  • 二进制除法

    万次阅读 2013-07-01 14:54:14
    你真以为CPU会做二进制除法呀?它就是作减法(这减法也是用补码做加法)。用被除数减除数,减一次,就在另一个地方加个1,直到被除数小于除数了,那么在那个地方放数就是商,剩下被除数就是余数。现在CPU...
  • 【转】二进制除法

    2008-09-19 22:15:54
    和二进制乘法一样,二进制除法比十进制除法要简单,二进制除法使用十进制一样的除法运算法则(长除法longhand),而且二进制除法要更简单,因为在长除法的每一步,都能很容易地看出被除数是否包含除数。...
  • 计算机底层的逻辑运算处理,我们这边不进行解释,只从二进制的位运算方面来解释实现乘法和除法的运算规则。 计算机在计算乘法、除法、以及求余运算时都是利用二进制的加法来实现的,也就是计算机中最繁忙的累加器...
  • 小古银的官方网站(完整教程):http://www.xiaoguyin.com/ ... 目录 目录 ...二进制的乘法和除法 左移运算和右移运算 基础示例 基础讲解 与运算 或运算 异或运算 取反运算 基础示例 基础讲解 运...
  • 虽然我们在编程语言中可以直接使用+-/,但是对某些要求不能用/情况下,我们有必要了解一下计算机是怎样完成乘除法的。 首先,我们要明确一下计算机所能完成最基本操作是:+(-)左移右移。虽然ISA中一般都有...
  • 首先要提一点,在SOC系统中,运算速度一般是移位&gt;乘法&gt;除法。 1.乘法。 最简单的A*B,用C语言for循环 ...法2:模拟二进制乘法手动运算,适合大整数的乘法。 以前写汇编的时候就写...
  • 在用2去除商,又会得到一个商余数,如此进行,知道商为0时为止,然后把先的到的余数作为二进制的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。 小数部分采用乘2取整,具体做法:用2乘十进....
  • 有一定的编程经验的人都知道,当我们对数据操作的时候,若数据过大,计算机将这个大数从十进制的转为二进制的,是没有那个类型的放的了的,因此,我们经常将一个大数转化为字符串来操作。接下来我将演示大整数的加法...
  • 二进制基础

    2020-01-07 09:52:06
    二进制 二进制的运算 加法 二进制加法有四种情况: 0+0=0,0+1=...十进制乘法一样,从低位开始与全数相乘,然后按二进制的加法计算。 减法 二进制减法有四种情况:0-0=0,1-0=1,1-1=0,0-1=1 除法 二进制除法...
  • 这一节主要介绍二进制加法、二进制减法、二进制乘法、二进制除法以及二进制反码、补码等知识。一 二进制加减乘除前面二进制的加减乘除这部分比较基础,也很直接,我就直接复制粘贴老师的PPT了。二 原码、反码补码...
  • 二进制算术运算

    千次阅读 2019-10-27 11:24:54
    二进制算术运算包括加法、减法、乘法和除法。 1)加法运算 加法进位规则:逢二进一。 加法运算法则: 0+0=0 0+1=1+0=1 1+1=10(向高位进位) 例:(1101)2+(1011)2=?,解算如下: 从执行加法过程可知,两个二进制数...
  • 二进制运算

    2010-02-21 16:59:03
    在计算机中,引入补码表示后,加上一些控制逻辑,利用加法就可以实现二进制的减法、乘法和除法运算。 1)二进制的加法运算  二进制数的加法运算法则只有四条:0+0=0 0+1=1 1+0=1 1+1=10(向高位进位)  例:...
  • 1 用逻辑运算实现加法: 两个正整数相加,如果使用移位操作符逻辑运算: 与&运算,适用于对应位相同加法,如x=3=(0011),y=3=(0011),则x&y=0011=(x+y)/2;...对于二进制加法:1+1=0,1+0=1,0+1=1
  • C程序实现-定点数的乘法除法

    千次阅读 2020-04-21 15:11:37
    输入两个二进制定点整数,用原码一位乘法输出两数乘积,再用原码恢复余数,输出两数相除余数。 #include "stdio.h" #define W 5 #define S 4 #define N 9 void input(int map[]) { int i=W;char t[W]={0}...
  • 简单c语言课程设计二进制计算器,可以实现简单的二进制加法、减法、和乘法(不包含除法)。
  • 31.1-13 写出一个高效算法,用于将...证明:如果长度至多为β的整数的乘法除法运算所需时间为M(β),则执行二进制到十进制转换所需时间为θ(M(β)lgβ)。(提示:应用分治法,分别使用独立的递归计算结果的前段后段)
  •   计算机中的最底层的加法器和乘法器都是基于二进制的运算特性设计而成,并且乘法器运算开销大。如果使用2的幂次方数据,乘除法可以用对应的位移操作代替,比如*256 = <<8,/64 = >> 4。 2. 学会用&...
  • 十六进制的加、减、乘、、左移、右移计算

    万次阅读 多人点赞 2019-09-25 19:09:37
    三、十六进制的乘法 四、十六进制的除法 五、十六进制的左移计算 六、十六进制的右移计算 十六进制的计算方法十进制差不多,十进制是满十进一,那么十六进制一样,满十六进一,不够时向前一位借一,具体可参考...
  • 二进制算术1、逻辑运算1.1 加法运算规则1.2 减法运算规则1.3 乘法运算规则1.4 除法运算规则2、逻辑运算 \quad \quad二进制是计算技术中广泛采用一种数制。二进制数据是用01两个数码来表示数。它基数为2,...
  • 必须要记住,十进制才是适合人使用,因此,输入输出设备需要承担二进制和十进制之间转换工作 ——约翰⋅\cdot冯⋅\cdot诺依曼 1 乘法器1.1 优化前 优化方法: 加法移位并行减少不必要硬件资源 1.2 优化后2 ...
  • 这一节主要介绍二进制加法、二进制减法、二进制乘法、二进制除法以及二进制反码、补码等知识。一 二进制加减乘除前面二进制的加减乘除这部分比较基础,也很直接,我就直接复制粘贴老师的PPT了。二 原码、反码补码...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 310
精华内容 124
关键字:

二进制的乘法和除法