精华内容
下载资源
问答
  • 二进制实现加法

    2020-04-13 21:10:45
    二进制实现加法 一、原理    1、化简  先看一个例子:  看一下 3 + 4 的加法运算  3 的二进制表示: 011  4 的二进制表示: 100  3^4 (3按位异或4)的结果是: 111 => 7  上面的到的结果是就是 3 + ...

    二进制实现加法

    一、原理

      

      1、化简

        先看一个例子:
        看一下 3 + 4 的加法运算

        3 的二进制表示: 011
        4 的二进制表示: 100

        3^4 (3按位异或4)的结果是: 111 => 7
        上面的到的结果是就是 3 + 4 的实际结果


        再看一个例子:

        12 的二级制表示:  01100
        19 的二进制表示:  10011

        12^19 的结果是: 11111 => 31

        再看一个例子:
        13 的二进制表示:01101
        19 的二进制表示:10011

        13^19 的结果是: 11110 => 20

        通过上面的三个例子不难发现: 当二进制数的每一位加法中不发生进位时,按位异或的结果就是最终的加法结果,那么我需要做的就是将所有的加法操作最终都简化成没有进位的加法操作,最终的结果就是两个数按位异或的结果。

      2、怎么处理有进位的加法?

        拆分
          将两个数的加法拆分为 进位加法和不进位加法

        看一个例子:


        编号:1 2 3 4 5
            ------------------------
           1 0 0 1 1 => 19
          +  1 1 0 1 0 => 26
         --------------------------

        先求只有不进位的两个位相加的值,编号为2、3、5这三位的加法不发生进位操作,需要进位的相加位数直接按照结果为0处理,得到的结果为

        编号:1 2 3 4 5

            ------------------------
              1 0 0 1 1
           + 1 1 0 1 0
             ------------------------
       不进位: 0 1 0 0 1

               进位两个位相加的值,编号为1、4这三位的加法会发生进位操作,不需要进位的直接按照结果0处理,得到的结果为:

          编号:1 2 3 4 5
              ------------------------
                1 0 0 1 1
             + 1 1 0 1 0
              ------------------------
          不进位:   0 1 0 0 1
          进   位: 1 0 0 1 0 0

        再将两个结果按位异或:
          不进位:0 0 1 0 0 1
          进    位:1 0 0 1 0 0
              ------------------------
               1 0 1 1 0 1 => 45

        由此可见可以将一个二进制加法拆分为有进位的位数相加结果 和 无进位的位数相加的结果最终按位异或

      3、递归

        再看一个例子

        编号:1 2 3 4 5
            ------------------------

              1 0 1 1 1 => 23
           + 1 1 0 1 1 => 27
            ------------------------

        不进位:   0 1 1 0 0 => 12
        进   位: 1 0 0 1 1 0 => 38


        通过一次相加得到的结果不能完全实现化简操作,所以需要递归地进行化简操作

        编号:1 2 3 4 5
            ------------------------

              1 0 1 1 1 => 23
           + 1 1 0 1 1 => 27
            ------------------------

       不进位: 0 0 1 1 0 0 => 12
          进    位:1 0 0 1 1 0 => 38
            ------------------------

        不进位:1 0 1 0 1 0 => 42
        进    位:0 0 1 0 0 0 => 8
            ------------------------

         不进位:1 0 0 0 1 0 => 34
         进    位:0 1 0 0 0 0 => 16
            ------------------------

        不进位:1 1 0 0 1 0 => 50
        进    位:0 0 0 0 0 0 => 0

        以上实例通过递归的方式可以得到最终的结果

    二、位运算实现

      通过以上几个实例我们明白了如何通过二进制的几个步骤来实现任意整数的加法操作,现在我们需要把这件事情用位运算进行表示。

      位运算表示不进位加法:
        不进位加法其实就是一个异或操作
      位运算表示进位加法:
        进位加法其实就是一个与操作的结果左移一位

     

    二进制下两数求和,分三步:
    1.各位值相加,不算进位值,二进制亦或运算
    2.计算进位值,二进制与运算,然后左移一位;
    3.对1,2步的结果,重复以上两步骤

    class Solution:    def Add(self, num1, num2):
           # write code here        
           while num2 != 0:
                   temp = num1 ^ num2            
                   num2 = (num1 & num2) << 1           
                   num1 = temp & 0xFFFFFFFF        
           return num1 if num1 >> 31 == 0 else num1 - 4294967296

    原文链接:

    https://www.cnblogs.com/kingsm/p/9707988.html

    https://blog.csdn.net/weixin_43994113/article/details/90757863

    展开全文
  • 二进制实现加法python

    千次阅读 2019-05-21 15:09:37
    二进制加法的原理 以5+2为例: 5 的二进制表示: 101 2 的二进制表示: 010 3^4(两个数字异或)的结果是: 111 => 7 上面的到的结果是就是 5 + 2 的实际结果 以13+19为例 13 的二进制表示:01101 19 的二进制...

    二进制加法的原理

    以5+2为例:

    5 的二进制表示: 101
    2 的二进制表示: 010
    3^4(两个数字异或)的结果是: 111 => 7
    上面的到的结果是就是 5 + 2 的实际结果

    以13+19为例

    13 的二进制表示:01101
    19 的二进制表示:10011
    13^19 的结果是: 11110 => 20
    如果直接按位异或的话结果为20,不等于13+19。

    规律

    通过上面的两个例子可以发现: 当二进制数的每一位加法中不发生进位时,按位异或的结果就是最终的加法结果,如5+2。在第二个13+19的例子中,按位异或的结果是11110,这是不考虑进位的结果。如果考虑进位的话,可以得到进位值为10=(01101&10011)<<1,类似于十进制的加法,需要将进位和之前的得到的结果再按位取异或,重复这个过程,直到进位值为0,最终得到的结果就是两个数相加。

    有进位加法的处理

    还是以上述13+19为例
    1. 先不考虑进位,编号为1、2、3、4这四位的加法不发生进位操作,需要进位的相加位数直接按照结果为0处理,相当于对两个数的二进制进行按位异或,得到:
      位数:1 2 3 4 5
      0 1 1 0 1 => 13
      ^ 1 0 0 1 1 => 19
      ……………………
      1 1 1 1 0

    2. 计算进位值,在发生进位的上一位即为1,其他位记为0,相当于按位取与,并左移一位,其中,第1位发生进位操作,那么结果第二位取1,其他位取0,得到:
      位数:1 2 3 4 5
         0 1 1 0 1
        & 1 0 0 1 1
      ……………………
      0 0 0 0 1 << 1 => 0 0 0 1 0

    3. 重复第一步第二步,将第一步和第二步得到的1 1 1 1 0 和 0 0 0 1 0再先不考虑进位相加,即再按位异或,并得到进位值(按位取与左移一位)得到:
          1 1 1 1 0
         0 0 0 1 0
      …………………………
      不进位: 0 1 1 1 0 0
      进位值: 0 0 0 1 0 0
      …………………………
      再次重复上述步骤。得到:
      不进位: 0 1 1 0 0 0
      进位值: 0 0 1 0 0 0
      …………………………
      不进位: 0 1 0 0 0 0
      进位值: 0 1 0 0 0 0
      …………………………
      不进位: 0 0 0 0 0 0
      进位值: 1 0 0 0 0 0
      …………………………
      不进位: 1 0 0 0 0 0
      进位值: 0 0 0 0 0 0
      …………………………
      最后的进位值为0,停止循环,得到最后结果:
      1 0 0 0 0 0 => 32,即为最后结果。

    python代码

    def add (a,b):
        num1 = a ^ b
        num2 = (a & b) << 1
        while num2 != 0:
            temp  = num1 ^ num2
            num2 = (num1 & num2) << 1
            num1 = temp
        return num1
    print(add(13,19))
    # 输出为32
    
    展开全文
  • 使用二进制 s = a + b = n + c;c为进位和,n为非进位和 异或操作可得到非进位和,相与并左移一位可得到进位和 代码实现 func add(a int, b int) int { // 进位为0跳出循环 for b != 0 { // 进位和 c := (a &...

    题目描述

    写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。

    示例:

    输入: a = 1, b = 1
    输出: 2

    解题思路

    • 使用二进制
    • s = a + b = n + c;c为进位和,n为非进位和
    • 异或操作可得到非进位和,相与并左移一位可得到进位和

    代码实现

    func add(a int, b int) int {
        // 进位为0跳出循环
        for b != 0 {
            // 进位和
            c := (a & b) << 1
            // 非进位和
            a ^= b
    
            b = c
        }
        return a
    }
    
    展开全文
  • 二进制数的每一位加法中不发生进位时,按位异或的结果就是最终的加法结果,那么需要做的就是将所有的加法操作最终都简化成没有进位的加法操作,最终的结果就是两个数按位异或的结果。 第二步:处理有进位的数据 ...

    第一步:化简

                  当二进制数的每一位加法中不发生进位时,按位异或的结果就是最终的加法结果,那么需要做的就是将所有的加法操作最终都简化成没有进位的加法操作,最终的结果就是两个数按位异或的结果。

    第二步:处理有进位的数据

                  对于有进位的  我们可以认为是那些缺少的数据  我们需要通过进位加法得到后重新进行按照没有进位的继续相加。

    代码:

    public static void testAaddB(){
    		// 每次递归中都进行异或、相与左移1,然后,将得到的结果再做同样的操作,直到进位为0,递归停止
    		int a = 5;
    		int b = 9;
    		while (b != 0)
            {
                int tmpa = a ^ b;
                int tmpb = (a & b) << 1;
                a = tmpa;
                b = tmpb;
                System.out.println("tmpa: " + a);
                System.out.println("tmpb: " + b);
            }
    		System.out.println(a);
    	}

     

    展开全文
  • 二进制实现不用四则运算做加法,系统的对二进制知识和位运算补充!
  • 二进制下两数求和,分三步: 各位值相加,不算进位值,二进制亦或运算 计算进位值,二进制与运算,然后左移一位; 对1,2步的结果,重复以上两步骤 两数之和就是不计算进位值加上进位值,直到没有进位 第二部为...
  • 二进制是如何将加减乘除变换为加法实现的?加法是如何由逻辑运算与、或、异或来实现的?关注者151被浏览10205查看全部13个回答匿名用户5分钟教会你古中国人古埃及人和计算机如何用二进制做乘除法 。 有空整理找的“1...
  • 基于VHDL静态显示8位二进制并行加法器的实现,课程设计的文档
  • C语言计算二进制加法

    千次阅读 2020-09-07 21:18:12
    文章目录前言一、C语言中二进制加法计算测试结果 前言 在C语言中计算二进制数的加法 一、C语言中二进制加法计算 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <...
  • java实现二进制加法

    千次阅读 2018-07-12 17:11:00
    总结:讲解了二进制的按位异域、按位与、左移的运算规则。并通过次3种算法得到2个数相加的结果。二进制应该还有其他算法,由于知识浅薄就不知道了。 代码: public static void main(String[] args){ int a...
  • 二进制并行加法

    千次阅读 2012-12-06 04:36:47
    二进制并行加法器是一种能并行产生两个二进制数算术和的逻辑部件,按其进位方式的不同可分为串行进位和超前进位二进制并行加法器。 目前常用的串行进位4位二进制并行加法器有T692,超前进位4位二进制
  • import java.util.*; public class erjinzhi { public static void main(String[] args) { Scanner reader=new Scanner(System.in); while(reader.hasNext()) { ...
  • 而要实现二进制加法最关键的步骤就是如何实现进位和相加(仅停留与本位的不进位加法)。 1.用"与"来提取进位 由AND(与,下文皆称为AND)的运算性质可以得到只有当两个数都为1时才能运算得1正好提取了进位,只要向左...
  • Verilog实现两个100位二进制加法

    千次阅读 2020-07-15 10:25:12
    通过实例化100个全加器来实现一个100bit的二进制加法器。该加法器有两个100bit的输入和cin,输出为sum与cout。为了鼓励大家使用实例化来完成电路设计,我们同时需要输出每个全加器的cout。 故cout[99]标志着全加器的...
  • 由于是单链表,即只能通过一个方向进行遍历,但是为了模拟加法操作,即必须要在表尾进行加1操作并要准确的考虑进位,所以我们利用链表的逆置,即先逆置,再加1,再逆置,即可方便的实现二进制数的加1
  • 该程序使用vivado与FPGA板可实现四位二进制数可控加法的功能,用数码管显示,动态输入动态显示,并添加按键防抖功能。
  • word格式word格式《电子设计自动化》实验报告实验六 实验名称:8位...二、实验内容设计并实现一个由两个4位二进制并行加法器级联而成的8位二进制并行加 法器。要求编写4位加法器的VHDL语言程序,顶层8位加法器的设...
  • 计算机中二进制加法

    万次阅读 多人点赞 2018-03-26 15:11:27
    :位逻辑与 将操作数转换成二进制数,然后将两个二进制操作数对象从低位到高位对齐,每位求与。若操作数对象同一位都为1,则结果对应位为1,若操作数对象同一位为0。 | :位逻辑或 将操作数转换成二进制数 ,然后...
  • ##MATLAB之Simulink(四) ...两个1位二进制数相加,若只考虑了两个加数本身,而没有考虑由低位来的进位的运算称为半加,而实现半加运算的逻辑电路称为半加器。 也就是说,半加器仅适用于一位二进制数的
  • php实现二进制加法: 思路:没有工作中应用过此场景,但十进制的加法还是经常做的,能不能用十进制加法变相实现呢? 答案是可以的,并且php也提供进制间转换的函数,我的实现使用了 bindec():二进制转十进制;...
  •  计算机计算二进制加法是分三部,第一步为将两个加数转换为二进制数,计算两个加数不需要进位的和(利用异或运算 ^ ),得出的结果。第二部将两个加数进行与运算(&)。第三部利用与运算得到结果进行左移运算()...
  • 一、实验项目名称:二进制补码加法器 二、实验目的: 根据补码加法器的模型,理解数据流及其时序关系。 掌握加法实现补码加、减运算的基本原理。 三、实验内容   实验接线图:   四、实验器材(设备、...
  • (1) 给定两个只含有0和1字符的字符串,实现二进制加法。如: String str1 = “101” String str2 = “11” 实现binarySum(String s1,String s2),使得输入以上字符时返回字符串"1000"。 拿到这个需求之后 开始是一脸...
  • 二进制加法机的简单实现

    千次阅读 2013-10-16 21:16:39
    二进制加法机的简单实现  2010-11-17 21:58:29| 分类: 计算机基础 | 标签:加法机 |字号 订阅 在计算机中只有加法,可以说实现加法,我们就可以实现减法、乘法、除法甚至更复杂的操作,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,892
精华内容 17,956
关键字:

二进制实现加法