精华内容
下载资源
问答
  • 二进制乘法运算

    千次阅读 2020-09-23 14:01:35
    (2) 获取整数n的二进制中最后一个1: n&~(n-1)或者n&(-n)。例如n=010100,则-n=101100,n&(-n)=000100。 (3) 去掉整数n的二进制中最后一个1: n&(n-1)。例如n=010100,n-1=010011,则n&(n-1)=010000...

    在回答本问题之前,先学习一些有关位运算的知识。

    (1) 常用的等式: -n=~(n-1)=~n+1

    (2) 获取整数n的二进制中最后一个1: n&~(n-1)或者n&(-n)。例如n=010100,则-n=101100,n&(-n)=000100。

    (3) 去掉整数n的二进制中最后一个1: n&(n-1)。例如n=010100,n-1=010011,则n&(n-1)=010000。

    注:对n为正数或者负数都适用。

    先看一个实例:1011*1010,因为二进制运算的特殊性,可以将该乘法运算表达式拆分成两个运算,1011*0010于1011*1000的和。而对于二进制运算,左移一位,等价于乘以0010,左移三位,等价于乘以1000,所以两者的乘积为10110于1011000的和,即为1101110.

    因而乘法可以通过一系列的移位和加法运算完成。最后一个1通过n&~(n-1)求得,可通过n&(n-1)去掉最后一个1,为了高效的得到左移的位数,可提前计算一个map。算法如下,所示:

    #include <iostream>
    #include <map>
    #include <exception>
    using namespace std;
    int multiply(int a,int b){
    	bool neg=(b<0);
    	if(b<0)
    		b=-b;
    	int sum=0;
    	map<int,int> bits;
    	for(int i=0;i<31;i++){
    		bits.insert(pair<int,int>(1<<i,i));
    	}
    	while(b>0){//循环条件
    		int bitshift=bits[b&~(b-1)];//获取移位的次数
    		sum+=a<<bitshift;
    		b&=b-1;//去掉最后的1
    	}
    	if(neg)
    		sum=-sum;
    	return sum;
    }
    int main()
    {
    	cout<<multiply(3,-5)<<endl;
    	return 0;
    }

     

    展开全文
  •   在嵌入式环境中虽然有乘法运算器,而且芯片运算速度越来越快,但位运算还是最快速的,为了提高计算效率,可以将乘法运算使用位运算替换。 原理   乘法可以用按位运算的基本原理,分两步 因式分解: A * (B + ...


      在嵌入式环境中虽然有乘法运算器,而且芯片运算速度越来越快,但位运算还是最快速的,为了提高计算效率,可以将乘法运算使用位运算替换。

    乘法

    原理

      若被乘数是2的整数倍,可以直接进行左移运算,这个比较简单,本文解释下当被乘数不是2的整数倍的情况,乘法进行位运算替换的基本原理,分两步

    1. 因式分解: A(B+C)=AB+ACA * (B + C) = A * B + A * C
    2. 位移替换乘法 :A2n=A&lt;&lt;nA * 2 ^ n = A &lt;&lt; n

    十进制分解

      以10的整数倍为例,进行10进制替换:
    10=8+2=23+2110 = 8 + 2 = 2^3 + 2^1
    100=64+32+4=26+25+22100 = 64 + 32 + 4 = 2^6 + 2^5 + 2^2
    1000=1024168=21024231000 = 1024 - 16 - 8 = 2^{10} - 2^4 - 2^3

    程序示例

    a = 543
    m10 = 10 # 10 = 8 + 2 = 2^3 + 2^1
    m100 = 100 # 100 = 64 + 32 + 4 = 2^6 + 2^5 + 2^2
    m1000 = 1000 # 1000 = 1024 - 16 - 8 = 2^10 - 2^4 - 2^3
    
    am10_cheng0 = a * m10
    am100_cheng0 = a * m100
    am1000_cheng0 = a * m1000
    am10_cheng1 = (a << 3) + (a << 1)
    am100_cheng1 = (a << 6) + (a << 5) + (a << 2)
    am1000_cheng1 = (a << 10) - (a << 4) - (a << 3)
    print ("乘以10:",am10_cheng0,"  ",am10_cheng1)
    print ("乘以100:",am100_cheng0,"  ",am100_cheng1)
    print ("乘以1000:",am1000_cheng0,"  ",am1000_cheng1)
    

    运算结果

      将源码保存为python文件,使用python直接执行可以查看结果,结果如下:
    在这里插入图片描述

    除法

    原理

      跟乘法类似,若分母为2的整数倍,则直接进行右移运算,但若分母不是2的整数倍,则需要对分母进行分解。不过由于除法不能直接分解分母,需要将分母作为独立项进行拆分,除法位运算替换的基本原理,分三步

    1. 分子分母分离:BA=B1A\frac{B}{A} =B * \frac{1}{A}
    2. 分母算术分解: 1A=12n\frac{1}{A} =\sum\frac{1}{2^n}
    3. 位移替换乘法 :B2n=B&gt;&gt;n\frac{B}{2 ^ n} = B &gt;&gt; n

    十进制分解

      由于第二步的分母算术分解不容易,即不容易找到精确解,因此分数分解为12\frac{1}{2}的整数倍的和比较麻烦,而且若需要较高精度则需要更高阶的倍数,即其中的n要很大,以10为例:

    116+132+1256+1512=0.09960.1=110\frac{1}{16} + \frac{1}{32} + \frac{1}{256} + \frac{1}{512} = 0.0996 \approx0.1=\frac{1}{10}

      若在有限位内可以找到精确解,即灯饰两边刚好相等,而不是约等于,则可以进行分解运算,但是这样多运算也许并不比直接除法更快,因此如果除法的分母不是2的整数倍,而且并没有确定的分解方式,可以考虑直接使用除法。

    110116+132+1256+1512+14096=124+125+128+129+1212\frac{1}{10} \approx \frac{1}{16} + \frac{1}{32} + \frac{1}{256} + \frac{1}{512} + \frac{1}{4096} = \frac{1}{2^4} + \frac{1}{2^5} + \frac{1}{2^8} + \frac{1}{2^9} + \frac{1}{2^{12}}

    程序示例

    a = 543
    m10 = 10 
    
    # 1/10 ~= 1/16 + 1/32 + 1/256 + 1/512 + 1/4096 
    #       = 1/2^4 + 1/2^5 + 1/2^8 + 1/2^9 + 1/2^12
    am10_chu0 = int(a / m10)
    am10_chu1 = (a >> 4) + (a >> 5) + (a >> 8) + (a >> 9) + (a >> 12)
    print ("除以10:",am10_chu0,"  ",am10_chu1)
    

    运算结果

      将源码保存为python文件,使用python直接执行可以查看结果,结果如下:
    在这里插入图片描述

    展开全文
  • 二进制乘法运算

    千次阅读 2014-05-03 20:42:03
    1)二进制的加法运算和乘法运算公式都各有四条规则 二进制的加法运算 和乘法运算公式都各有四条规则

    1)二进制的加法运算和乘法运算公式都各有四条规则:

    A)加法

         0+0=0,0+1=1,1+0=1,1+1=10;

    B)乘法

        0*0=0,0*1=0, 1*0=0, 1*1=1


    展开全文
  • 二进制补码乘法除法 1)二进制乘法 (1) Binary Multiplication) Binary numbers can be multiplied using two methods, 二进制数可以使用两种方法相乘, Paper method: Paper method is similar to multiplication ...

    二进制补码乘法除法

    1)二进制乘法 (1) Binary Multiplication)

    Binary numbers can be multiplied using two methods,

    二进制数可以使用两种方法相乘,

    1. Paper method: Paper method is similar to multiplication of decimal numbers on paper.

      纸张方法:纸张方法类似于纸张上十进制数字的乘法。

    2. Computer method: Computer method is used by digital machines to multiply the binary numbers.

      计算机方法:数字计算机使用计算机方法乘以二进制数。

    However, both these methods follow the same rule of multiplication which is,

    但是,这两种方法都遵循相同的乘法规则,即

        0 * 0 = 0
        0 * 1 = 0
        1 * 0 = 0
        1 * 1 = 1
    
    

    Note: If two binary numbers are of 'n' bits each in magnitude, then their product can be maximum '2n' bits long in magnitude.

    注意:如果两个二进制数的大小均为'n'位,则它们的乘积最大为'2n'位。

    长手乘法/纸张方法 (Long Hand Multiplication/Paper Method)

    The long Hand Multiplication technique is similar to decimal multiplication that we do on paper.

    长手乘法技术类似于我们在纸上进行的十进制乘法。

    In this technique, we multiply the multiplicand with each bit of multiplier and add the partial products together to obtain the result.

    在这项技术中,我们将被乘数与乘数的每一位相乘,并将部分乘积相加以获得结果。

    We scan the multiplier from the RHS, if the multiplier bit is 1 then we copy the whole multiplicand in the partial product and if the multiplier bit is 0, we replace all the bits of the multiplicand with 0 in the partial product.

    我们从RHS扫描乘数,如果乘数位为1,则复制部分乘积中的整个被乘数,如果乘数位为0,则将乘积中的所有位替换为部分乘积中的0。

    Example 1: Compute (10)2 * (11)2

    示例1:计算(10) 2 *(11) 2

    Solution:

    解:

    binary multiplication 1

    Therefore, the result is (10)2 * (11)2 = (110)2

    因此,结果是(10) 2 *(11) 2 =(110) 2

    Verification:

    验证:

    We can verify our result by converting the binary numbers to respective decimal numbers and multiplying them to get the result.

    我们可以通过将二进制数字转换为相应的十进制数字并乘以它们以获得结果来验证我们的结果。

    Here, (10)2 = (2)10, (11)2 = (3)10 and (110)2 = (6)10. When we will multiply 2 and 3, we will get the product as 6, which we are getting by multiplication of binary numbers. Hence our solution is correct.

    在此, (10) 2 =(2) 10(11) 2 =(3) 10(110) 2 =(6) 10 。 当我们将23相乘时,我们将得到乘积为6 ,这是通过二进制数相乘得到的。 因此,我们的解决方案是正确的。



    Example 2: Compute (111)2 * (101)2

    示例2:计算(111) 2 *(101) 2

    Solution:

    解:

    binary multiplication 2

    Therefore, the result is (111)2 * (101)2 = (100011)2

    因此,结果为(111) 2 *(101) 2 =(100011) 2



    Example 3: Compute (1010.01)2 * (1.01)2

    示例3:计算(1010.01) 2 *(1.01) 2

    Solution:

    解:

    binary multiplication 3

    Therefore, the result is (1010.01)2 * (1.01)2 = (1100.1101)2

    因此,结果为(1010.01) 2 *(1.01) 2 =(1100.1101) 2

    2)二进制除法 (2) Binary Division)

    Like binary multiplication, division of binary numbers can also be done in two ways which are:

    像二进制乘法一样,二进制数的除法也可以通过两种方式完成:

    1. Paper Method: Paper Method division of binary numbers is similar to decimal division.

      纸张方法 :纸张方法对二进制数的除法类似于十进制除法。

    2. Computer Method: Computer Method is used by the digital devices where they make use of 2's complement of a number to subtract the numbers during division.

      计算机方法 :数字设备使用数字方法使用数字的补码来在除法运算中减去数字。

    长手分割法/纸法 (Long Hand Division Method/Paper Method)

    In binary division, there are only two possibilities either 0 or 1. If the divisor goes into the dividend then quotient will be 1 and if the divisor doesn’t then the quotient will be 0. Similar, to decimal division, we will subtract divisor from the dividend and the result will be appended by the next bit in the dividend. This process repeats until all the bits of the dividend are considered.

    二进制除法中 ,只有两种可能性,即0或1。如果除数进入被除数,则商将为1;如果除数没有,则商将为0。类似于十进制除法,我们将减去除数的红利和结果将被添加到红利的下一位。 重复此过程,直到考虑了除数的所有位。

    Example 1: Divide (111101)2 by (100)2

    范例1:将(111101) 2除以(100) 2

    Solution:

    解:

    binary division 1

    Therefore, the result is (111101)2 / (100)2 gives (1111)2 (Quotient) and 1 (Remainder)

    因此,结果为(111101) 2 /(100) 2得出(1111) 2 (商)和1(余数)



    Example 2: Divide (110101.11)2 by (101)2

    范例2:将(110101.11) 2除以(101) 2

    Solution:

    解:

    binary division 2

    Therefore, the result is (110101.11)2 / (101)2 gives (1010.11)2.

    因此,结果为(110101.11) 2 /(101) 2给出(1010.11) 2

    Verification:

    验证:

    We can verify our result by converting the binary numbers to respective decimal numbers and then dividing the dividend by the divisor to get the result.

    我们可以通过将二进制数字转换为相应的十进制数字,然后将除数除以除数来得到结果,从而验证我们的结果。

    Here, (110101.11)2 = (53.75)10, (101)2 = (5)10 and (1010.11)2 = (10.75)10. When we will divide 53.75 by 5, we will get the result as 10.75, which we are getting by doing division of binary numbers. Hence our solution is correct.

    在此, (110101.11) 2 =(53.75) 10(101) 2 =(5) 10(1010.11) 2 =(10.75) 10 。 当我们将53.75除以5时 ,将得到10.75的结果,这是通过对二进制数进行除法得到的。 因此,我们的解决方案是正确的。



    Example 3: Divide (1010.1)2 by (101.01)2

    示例3:将(1010.1) 2除以(101.01) 2

    Solution:

    解:

    binary division 3

    Therefore, the result is (1010.1)2 / (101.01)2 gives (10)2.

    因此,结果是(1010.1)2 /(101.01)2给出了(10)2。

    翻译自: https://www.includehelp.com/basics/binary-multiplication-and-division.aspx

    二进制补码乘法除法

    展开全文
  • 四位二进制乘法器设计报告原理此四位乘法器主要运用多次错位相加运算来实现乘法运算。由开关控制输入高电平或低电平产生两个二进制数(高电平有效),利用与门实现一位和四位的乘积运算,再将两次的乘积输入加法器,...
  • 基本的二进制算术运算算法,包括: 1. 总结2.减法3. 乘法4. 除法和取模5. 二进制-十进制转换 这些算法可用于计算非常大的整数,这是标准 Matlab 的变量类型无法处理的。 尽管可能不是最有效的,但这些对于教育目的和...
  • 二进制加减法,多种乘法方式实现二进制乘法
  • 二进制乘法、除法的计算过程解读

    千次阅读 2021-01-18 20:55:11
    本文包括4位二进制乘法(4位乘4位)和8位二进制除法(8位除4位)的详细计算过程。 1.创作原因 计组实验中的涉及到此问题,当时上网查阅了许多博客和资料都没能理解这两者的计算过程,因此想写一篇博客为后来者提供...
  • 计算机基础知识之二进制乘法

    千次阅读 2020-02-12 14:25:55
    那么二进制乘法是如何计算的呢? 我们都知道十进制的乘法,比如20.0*10=200.也就是小数点向右移动一位,如果是除以10的话,小数点就想左移动一位就可以了。 如果是二进制的话,也是同样的道理。只不过改成了2的幂次...
  • quartus软件设计实现8位二进制乘法器电路

    万次阅读 多人点赞 2018-03-25 10:40:29
    一、选题目的1、学会使用quartus软件设计电路及对其进行仿真,设计实现8位二进制乘法器电路。2、学习并掌握8位二进制乘法器的原理、设计、分析和测试方法。二、设计目标采用移位相加的方法实现8位二进制乘法器电路。...
  • 二进制乘法的booth算法

    千次阅读 2020-04-08 15:26:22
    二进制乘法的 booth 算法 wiki 的解释 算法原理 考虑一个由若干个 0 包围着若干个 1 的正的二进制乘数,比如 00111110,积可以表达为: M× ′′0  0  1  1  1  1  1  0 ′′=M×(25+24+23+22+21...
  • 8位二进制乘法采用移位相加的方法。即用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加...
  • 进制乘法 位移运算 的表示

    千次阅读 2018-08-21 09:39:52
    预备知识: 4(十进制) * 2 = 100(二进制) * 2 = 100(二进制) &lt;&lt; 1(左移一位) = 1000(二进制) = 8 (十进制) 可以自行演示4(十进制)* 4 ; 得到的结论为 左移 1 位,即乘以2,左移两...
  • 二进制乘法实现方法不难,模拟手动运算的思想,之所以选用字符串实现是因为字符串在移动方面性能显著,代码运用知识十分基础,希望可以给大家一个参考。 函数部分 思来想去,本来弄了好几个函数,但是发现有些...
  • ## 线上实验五:2个2位二进制乘法

    千次阅读 2020-08-05 19:22:48
    线上实验五:2个2位二进制乘法器 一、实验目的 设计一个乘法器, 实现两个四位二进制数的乘法。 两个二进制数分别是被乘数 AB和乘数CD。被乘数和乘数这两个二进制数分别由高低电平给出。 乘法运算的结果即乘积由一...
  • 有符号的二进制乘法

    千次阅读 2020-04-13 22:16:17
    有符号二进制数的乘法 我的失误(差点误以为自己乘法有问题,自己和别人算的不一样) x=101=-3 和y=011=3相乘 结果为110111=-9 我刚开始以为是简单的把连个二进制码相乘得到的结果就是其答案(001111),而事实确...
  • 用VHDL语言做的4位二进制乘法器,编写用的是QuartusII软件。调用了寄存器,加法器,计数器。外加状态机,用原理图实现顶层的编写。
  • 为什么二进制乘除法可以转换成移位运算呢? 如: a=5; a=a*9; 可以转换成a=(a a=a*7 可以转换成a=(a a=a/12; 可以转换成 a=(a>>4)-(a 因为乘除和减法都能转换成移位和加法运算,所以cpu中只需要一个...
  • 二进制运算问题 问题描述:计算数n的二进制补码中有多少个1 Java源码: import java.util.Scanner; public class Main { /** * 计算数n的二进制补码中有多少个1  *int类型是32位的(9的补码二进制是3个1,-9...
  • 二进制乘法计算总结

    2020-08-27 12:55:53
    结论: 1.计算前符号位扩展 2.有符号负数计算机计算过程直接计算,人工语言转化为原码计算。 首先需要确定的是在计算机中所有的数都是以补码的方式存在。 所以在无符号数计算,因为无符号数的补码就是本身,可以直接...
  • 二进制信息最基本的三种逻辑运算:1、逻辑加法(又称“或”)运算,通常用符号“+”或“∨”来表示;2、逻辑乘法(又称“与”)运算,通常用符号“×”或“∧”或“·”来表示;3、逻辑否定(又称“非”)运算。本教程操作...
  • 二进制乘法的理解

    千次阅读 2019-10-19 11:16:33
    例:1100b = 12, 1101b = 13, ...二进制乘法的理解:1100b*1101b理解为,1100b*(1000b + 100b + 1b),即在一位、四位、八位,都有一个1100b(类似十进制12*13,理解为,个位有3个12,十位有1个12)
  • 修改的王金明Verilog HDL 8*8位2进制乘法。。自己的想法,从最高位开始运算,王老师从最低位开始运算
  • 十进制数转换为二进制数、八进制数、十六进制数的方法: 二进制数、八进制数、十六进制数转换为十进制数的方法:按权展开求和 与十进制 (1)二进制转十进制 方法:“按权展开求和” 【例】: 规律:...
  • 二进制运算

    2016-01-30 13:48:59
    位权:数制中每一固定位置对应的单位值,也就是某一位上的“1”所表示的数值的大小,称为该位的位权. 比如10进制数:1234, 个位位权1*10^0=1; 十位位权1*10^1=10;... 二进制和十进制的转换:比如67这个数
  • 74LS138译码器实现2位二进制乘法器-QuartusII 软件仿真 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录74LS138译码器实现2位二进制乘法器-QuartusII 软件仿真一、74LS138译码器介绍二...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,218
精华内容 16,887
关键字:

二进制怎么乘法运算