精华内容
下载资源
问答
  • 计算机中二进制加法

    万次阅读 多人点赞 2018-03-26 15:11:27
    :位逻辑与 将操作数转换成二进制数,然后将两个二进制操作数对象从低位到高位对齐,每位求与。若操作数对象同一位都为1,则结果对应位为1,若操作数对象同一位为0。 | :位逻辑或 将操作数转换成二进制数 ,然后...

    位运算符:

        &:位逻辑与    将操作数转换成二进制数,然后将两个二进制操作数对象从低位到高位对齐,每位求与。若操作数对象同一位都为1,则结果对应位为1,若操作数对象同一位为0。

         | :位逻辑或    将操作数转换成二进制数 ,然后将两个二进制操作数对象从低位到高位对齐,每位求或。若操作数对象同一位都为0,则结果对应为0,否则结果对应为1。

        ^ :位逻辑异或    将操作数转换成二进制数 ,然后将两个二进制操作数对象从低位到高位对齐,每位求异或。若操作数对象同一位不同为1,则结果对应位为1,否则结果结果中对应位为0。

        ~ :取反运算符    将操作数转换成二进制数 ,然后将各位二进制由0变成1,由1变成0。

    移位运算符:

        <<:左移    左移是将一个二进制操作数对象按指定的移动位数向左移,左边溢出的位数被丢弃,右边的空位用0补充。右移相当于乘以2的幂次。

                例如:

        >>:有符号右移    右移是将一个二进制操作数对象按指定的移动位数向右移,右边溢出的位数被丢弃,正数时左边的空位用0补充,负数时则左边的空位用1补充。右移相当于除以2的幂次。

            例如:


    计算机二进制加法运算:

        计算机计算二进制加法是分三部,第一步为将两个加数转换为二进制数,计算两个加数不需要进位的和(利用异或运算 ^ ),得出的结果。第二部将两个加数进行与运算(&)。第三部利用与运算得到结果进行左移运算(<<)(同时为计算两个加数需要进位的和),得出结果。将或异运算的结果和左移运算的结果作为两个新的加数,重复此操作。直到当与运算的结果为0,则异或运算的结果则为两个加数的和所对应的二进制数。

        例:



                                                                                                                                                                       2018.3.26

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

    千次阅读 2018-04-05 14:59:13
    第一步:将两个二进制数位补齐,在短的前面添0第二步:从后往前做加法第三步:将结果中的字符串反转 注意:此时需要用到StringBuilder ,用到append()方法。StringBuffer类中的方法主要偏重于对于字符串的变化,例如...

    第一步:将两个二进制数位补齐,在短的前面添0
    第二步:从后往前做加法

    第三步:将结果中的字符串反转 
    注意:此时需要用到StringBuilder ,用到append()方法。 StringBuffer类中的方法主要偏重于对于字符串的变化,例如追加、插入和删除等,这个也是StringBuffer和String类的主要区别。
    代码如下:

    class Solution{
     public String addBinary(String a,String b){
      int carry = 0; // 保存进位
      int sum = 0; // 存储进位与两个位之间的和
      int opa = 0;
      int opb = 0;
      StringBuilder res = new StringBuilder();
      //将两个二进制数位补齐,在短的前面添0
      while(a.length() != b.length()){
       if(a.length() > b.length()){
                 b = "0" + b;
       }else{
        a = "0" + a;
         }
       }
      //从后往前做加法
      for(int i = a.length()-1;i>=0;i--){
       opa = a.charAt(i) - '0'; //String a 中的字符的ASCII码值与‘0’字符的差值
       opb = b.charAt(i) - '0';       //String b 中的字符的ASCII码值与‘0’字符的差值
       sum = opa + opb + carry;
       if(sum >=2){
        carry = 1;
        res.append((sum-2));
       }else{
        carry = 0;
        res.append(sum);
       }
      }
      if(carry == 1){
       res.append("1");
      }
      return res.reverse().toString();
     }
    }
    public class addBinary {
    public static void main(String[] args) {
     String a = "11";
     String b = "1";
     String res = new Solution().addBinary(a, b);
     System.out.print(res);
    }
    }

    展开全文
  • 二进制加法

    千次阅读 2013-11-30 18:38:22
    Problem 51: 二进制加法 Time Limit:1 Ms| Memory Limit:128 MB Difficulty:1 Description 计算机使用的是二进制,和十进制不同的是:二进制运算“逢二进一”。下面举几个二进制加法的运算实例: ...

    Problem 51: 二进制加法


    Time Limit:1 Ms|  Memory Limit:128 MB
    Difficulty:1

    Description

    计算机使用的是二进制,和十进制不同的是:二进制运算“逢二进一”。下面举几个二进制加法的运算实例:
    例1(整数): 例2(含小数):
    11101 11101.1011
    + 110 + 110.11
    ------ -----------
    100011 100100.0111
    1所在的位置: 1所在的位置:
    6、2、1 6、3、-2、-3、-4

    你的任务是:对于任意的两个正的二进制数,求它们和中“1”所在的位置(其中小数点后面的位置用负数表示)。

    Input

    输入共两行:
    第一行:二进制的加数A,总长度<=200
    第二行:二进制的加数B,总长度<=200

    Output

    输出二进制数A+B中“1”所在的位置,位置排序为:整数部分从左到右:N、N-1、N-2...1,小数部分从左到右:-1、-2、......、-N,数据之间用空格分隔,行末没有多余的空格,有空行。

    Sample Input

    样例输入1:
    11101
    110

    样例输入2:
    11101.1011
    110.11

    Sample Output

    样例输出1:
    6 2 1

    样例输出2:
    6 3 -2 -3 -4

    Hint

    数据范围:
    40%的数据:A、B均为正整数,总长度<=31
    70%的数据:A、B含小数,小数位数相等,总长度<=200
    100%的数据:A、B可能含小数,小数位数可能不相等,总长度<=200

    思路:突然发现, 自己在字符串处理方面的功底实在是太差了, 这道题的思路主要是

    小数点的处理, 有一个 <string.h>里的strchr(), 可以很快找出字符串中的某一字符并返

    回其指针, 这样我们就可以求小数点所在位置的下标, 然后用两个数组pre[], aft[] 存储

    '.'之前和之后的数(这样最后显示1位置时较简单),然后就是注意一下小数数组 和整

    数数组的进位。

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    char str1[500], str2[500];
    int pre[500], aft[500], left, right, temp[500];  //整数部分, 小数部分, 整数部分最左端, 小数部分最右端, 存放结果的数组
    
    int change(char str[])
    {
    	int len, i, j, pos, carry;
    	char *p;
    	len = strlen(str);
    	p = strchr(str, '.');         //找'.'的位置
    	if(p == NULL)                 //p = NULL 时为整数
    	{
    		pos = len;                
    	}
    	else
    	{
    		pos = p - str;            //求下标
    	}
    	for(i = pos - 1, j = 0; i >= 0; i--)
    	{
    		pre[j++] += (str[i] - '0');     //注意此处为+=
    	}
    	if(j > left)
    	{
    		left = j;
    	}
    	for(i = pos + 1, j = 0; i < len; i++)
    	{
    		aft[j++] += (str[i] - '0');      //同上
    	}
    	if(j > right)
    	{
    		right = j;
    	}
    	for(i = right+1; i >= 0; i--)
    	{
    		aft[i] += aft[i+1]/2;             //小数部分最终进位
    		aft[i+1] = aft[i+1]%2;		
    	}
    	pre[0] += aft[0]/2;                   //注意小数到整数的进位
    	aft[0] %= 2;
    	for(i = 1; i <= left+1; i++)
    	{
    		pre[i] += pre[i-1]/2;              //整数的进位
    		pre[i - 1] = pre[i - 1]%2;		
    	}
    	return 0;
    }
    
    int main()
    {
    	int i, t;
    	left = right = 0;
    	scanf("%s", str1);                     
    	scanf("%s", str2);
    	change(str1);                          //开始pre, aft都为0, 进行两次加
    	change(str2);
    	t = 0;
    	for(i = left+1; i >= 0; i--)
    	{
    		if(pre[i] == 1)
    		{
    			temp[t++] = i+1;                //找出并保存结果	
    		}
    	}
    	for(i = 0; i < right+1; i++)
    	{
    		if(aft[i] == 1)
    		{
    			temp[t++] = -(i+1);
    		}
    	}
    	for(i = 0; i < t-1; i++)
    	{
    		printf("%d ", temp[i]);              //打印结果,注意输出格式
    	}
    	printf("%d\n", temp[t-1]);
    	return 0;
    }


    展开全文
  • vhdl二进制转十进制BCD码加法

    热门讨论 2011-06-08 19:21:49
    实现8421BCD码加法二进制与十进制之间的相互转换功能 完成将6位二进制数值转换成2位BCD形式十进制数的功能 完成2位BCD码加法运算
  • code用了一定的篇幅写编码以及进制的内容(毕竟书名就叫code),这部分内容我可能兴趣缺缺吧...多位二进制加法器 工业成品类比 多说几句 用继电器构造简单的逻辑门 相对于抽象的与或非,或者现在电...

    code用了一定的篇幅写编码以及进制的内容(毕竟书名就叫code),这部分内容我可能兴趣缺缺吧,所以第一篇学习笔记便从加法器写起啦。


    目录


    用继电器构造简单的逻辑门

    相对于抽象的与或非,或者现在电路中的精巧原件,作者用线圈与电磁体构造的门形象的描述了一系列的门。作为学习笔记,应以简而明了为要,所以以下省略了作者的大量篇幅,或许会显得不够详细。

    一个继电器:

    一个电磁铁是两个电路有了关联,开关闭合,灯泡亮。

    反向器(非)

    与继电器极为相像,只不过开关闭合,灯泡灭。

    与门和与非门

    两个继电器右端电路的串联,当且仅当两个开关闭合,灯泡才亮。

    抽象为与门如下

    信号1代表开关闭合(高电平输入),信号0代表开关断开(低电平输入),与门列表:

    AND01
    000
    101

    在与门的末尾(即灯泡与输出之间)加一个反向器,得到与非门NAND

    或门

    如果说与门是两个继电器的“串联”,那么或门则是“并联”

    或门符号

    或门列表

    OR01
    001
    111

    在或门的末尾(即灯泡与输出之间)加一个反向器,得到或非门NOR

    异或

    在数理逻辑里,与、非或者或、非就是一个联结词的完备集了,通过其中任意一组既可以表示出所有的联结词。有了与或非,异或门将直接由它们组成。

    异或门

    XOR01
    001
    110

    二进制半加器

    由于神奇的二进制“阳阳易数”,通过以上几个门来实现二进制的非进位加法就可行了。
    先列出加和表

    +01
    001
    110

    妥妥的一个异或门。
    再来个进位表

    进位01
    000
    101

    就是一个与门。
    那么一位数的二进制半加器就大功告成啦!

    (学到此处如果你和我一样迫不及待的想动手实践,那么你可以考虑考虑通过mc的红石电路来实现它们)

    二进制全加器

    加法如果在最低位自然不需要考虑进位,但是如果你想搭建一个多位数的加法器,那么输入端也就必须要有一个进位输入,这就是全加器。
    比较容易想到的一个方法就是做两次加法,进位输入和第一次加法的结果进行再一次的加法,就可以得到一个完整的全加器啦。当然,第一次加法的结果包括了进位输出和加和输出,那么第二次加法自然也要处理好这两个事情。

    这就组成了一个一位全加器,封装后如下:
    这里写图片描述

    多位二进制数加法器

    有了二进制全加器,解决了进位问题,那么要构建多位数的加法器也就水到渠成了。
    将全加器倒过来,每个全加器的进位输出连着下一位的进位输入,如此“并联”,既可以得到多位数的加法器了,下图构建的是一个八位加法器。
    这里写图片描述
    封装后如下
    这里写图片描述

    工业成品类比

    (没有百度到行波进位加法器,凑合着看吧,大概就是这样的接口了/百度的图/)
    这里写图片描述

    多说几句

    以上是由比较原始继电器构成的加法器,由于是行波进位,显然效率较低(后一位的加法必须要前一位的结果),书中还提到了一种前置进位电路的加法器,额,俺不会,看了头大,有时间再去了解吧。。。
    另外如果没有晶体管,半导体,集成电路的出现,最后的一张图片显然是没有的,构建上述加法器仅仅是为了明白原理,至少面对着最后一个小部件的时候,不会一脸懵逼,知道原理并会使用总是比只知使用不知原理好的。。。

    展开全文
  • 1、十进制 与 二进制之间的转换(1)、十进制转换为二进制,分为整数部分和小数部分整数部分方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数。这个步骤一直...
  • 计算机原理之二进制加法

    千次阅读 2020-05-08 11:44:32
    1、二进制加法表: 如上所示,一对二进制数相加的结果中具有两个数位,其中一位叫做加法位,另一位则叫做进位位。比如1加1等于0,进位为1 加法位如下所示: 进位位如下所示: 不知道这里大家看懂了没有?结合加法...
  • 十六进制加法HDU2057

    2018-01-28 19:32:21
    http://acm.hdu.edu.cn/showproblem.php?pid=2057 题目链接 借鉴了别人...所以这题可以直接用十六进制输入,然后进行十六进制的运算(其实不管是什么进制,在计算机中都是以二进制来计算的,只是按输入输出的格式不...
  • 本资源用MATLAB实现求已知阶数多项式是否为不可约多项式。其中可以设置阶数最大值,即可求出该阶数以内的所有不可约多项式。本程序中涉及到二进制加法,除法运算,以及二进制与十进制,矩阵,字符串之间的转换。
  • 我想从五个方面来说说有符号二进制加法溢出以及溢出后该如何计算这些个问题: ·什么是有符号二进制数 补码的计算以及还原 有符号数的加法 什么是溢出、什么是自然丢弃 溢出后该如何正确计算结果 一.什么是有符号...
  • RNN二进制加法实例

    千次阅读 2018-09-25 15:04:35
    b_int = np.random.randint(largest_num - a_int) #在小于largest_num -a_int之中随机挑选一个数字,之所以这么选取,是为了防止a_int+b_int超出了largest_num,还要重新转化为二进制,没有查字典快,当然,这里也...
  • 浅谈补码与二进制加法

    千次阅读 2016-12-27 11:18:52
    1、C语言之父,谭浩强老司机曾经教导我们,正数在计算机中的二进制表示,原码、反码、补码都是相同的,等于原码。 2、负数在计算机中,以其补码的形式表示。 3、以signed short举例,为什么计算机中,它的范围是-...
  • 字符串:二进制加法

    千次阅读 2018-05-03 21:43:58
    给定两个表示二进制数字的字符串,求它们的和,用二进制表示。如a = "1010", b = "1011",则和为"10101"。 方法一:直接对字符串进行二进制计算。 public String addBinary(String a...
  • 一、 十进制与二进制之间的转换 (1) 十进制转换为二进制,分为整数部分和小数部分 ① 整数部分 方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这...
  • 二进制进制之间的转换  二进制与八进制之间的关系式每个八进制位对应三个二进制位,详情如下:  八进制: 0 1 2 3 4 5 6 7  二进制:000 001 010 011 100 101 110 111  实例:  27.651(8) 010111....
  • 二进制 十进制 十六进制 进制间的转换 二进制 转 十进制 十进制 转 二进制 十六进制 转 十进制 十进制 转 十六进制 二进制 转 十六进制 十六进制 转 二进制 ©本文由博主原创,未经允许,不得转载相关博文...
  • 负数的二进制和十进制之间的转换

    万次阅读 2016-03-07 22:05:14
    负数的二进制和十进制之间的转换: 1. 十进制负数转换为二进制的方法为: 1、将十进制转换为二进制数。 2、对该二进制数求反。 3、再将该二进制数加1. 总之就是将十进制数转换为二进制数求补码即为结果。比如...
  • 二进制的世界中,只有0和1,平常组成的数字为8个,满2进1,比如0的二进制为 00000000,1的二进制为00000001,满2进1,那么2的二进制就为00000010 二、十进制转换为二进制 十进制整数转换为二进制整数十进制整数...
  • 一,二进制和十进制之间的zhuanhuan
  • 1、十进制 与 二进制之间的转换 (1)、十进制转换为二进制,分为整数部分和小数部分 整数部分 方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数。 这个步骤...
  • 一、 十进制与二进制之间的转换(1)十进制转换为二进制,分为整数部分和小数部分① 整数部分方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直...
  • 本文介绍了二进制、十进制、八进制、十六进制四种进制之间相互的转换,大家在转换的时候要...一、 十进制与二进制之间的转换 (1) 十进制转换为二进制,分为整数部分和小数部分 ① 整数部分 方法:除2取余法,即

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,704
精华内容 14,681
关键字:

二进制之间的加法