-
2018-06-30 13:47:36
《算法导论》第3版习题2.1-4中提到把两个n位二进制整数加起来的问题,这两个整数分别存储在两个n元数组A和B中,这两个整数的和应按二进制形式存储在一个(n+1)元数组C中。
可先将A、B数组反转,按位相加,定义进位carry,初始化为0,将三者加起来,对2取余即为当前位,对2取商即为当前进位,再将C数组反转一次即可得到想要的结果。
void reverseArray(int A[], int len) { int i = 0; int j = len - 1; while (i < j) { swap(A[i], A[j]); ++i; --j; } } void addBinary(int A[], int B[], int C[], int len) { if (len == 0) return; reverseArray(A, len); reverseArray(B, len); int carry = 0; for (int i = 0; i < len; ++i) { const int sum = A[i] + B[i] + carry; C[i] = sum % 2; carry = sum / 2; } // 不要写成 C[len + 1] = carry; C[len] = carry; reverseArray(C, len + 1); }
更多相关内容 -
我用最笨的办法理解二进制相加
2020-04-17 20:21:16这不一个二进制是怎么相加的,看别人计算可简单了,自己一算就不会。虽然咱笨,但咱有着不放弃的精神,慢慢磨叽,慢慢想啊。 那我是怎么理解二进制相加的呢? 首先二进制是根据“逢二进一 ”法则进行计数,只用‘0’...有道是学好数理化,走遍天下都不怕。谁让咱上学时没有好好学,数学对咱来讲是个大难题,别人可以一看就懂就会,咱的脑子得研究半天。
这不一个二进制是怎么相加的,看别人计算可简单了,自己一算就不会。虽然咱笨,但咱有着不放弃的精神,慢慢磨叽,慢慢想啊。那我是怎么理解二进制相加的呢?
首先二进制是根据“逢二进一 ”法则进行计数,只用‘0’,‘1’来表示。
记住0+0=0;0+1或者1+0都=1;关键来了:1+1=10;然后咱们开始往下计算。 -
Java两个二进制数求和
2021-02-09 15:47:28在本教程中,您将学习一个Java程序,了解如何对两个二进制数求和。二进制数仅以“ 0”和“ 1”表示。没有其他数字。如果一个数字的数字不为0和1,则它不是二进制数字。我在互联网上看到很多例子,它们都只显示程序,...1.简介
在本教程中,您将学习一个Java程序,了解如何对两个二进制数求和。二进制数仅以“ 0”和“ 1”表示。没有其他数字。如果一个数字的数字不为0和1,则它不是二进制数字。我在互联网上看到很多例子,它们都只显示程序,但给出了解释。在这里,它与按位与运算符不同。它看起来像&运算符,但不是。您将在本文中得到澄清。不要跳过任何内容,也不要直接看到代码。
通常,这可以通过两种方式完成。首先,我们不使用任何Java API方法,而仅使用交换理论与逻辑设计(STLD)主题中的工程概念,而第二种方法是使用Integer API完成的。在编写用于加法的程序之前,让我们看一下如何在纸上进行加法,如下图所示:
二进制数序列加法如下。
将两个二进制“ 1”(例如1 + 1)相加会产生十进制数字2,但我们应将其转换为二进制数10。这里0是实际的总和,而1是一个进位。
0 + 0将产生0
0 + 1-> 1
1 + 0-> 1
在这里,所有输出均应为二进制数字,并且不允许使用十进制数字。2.示例算法演练:在Java中添加两个Binay数
以两个二进制数进行演示。
binaryNumber1 = 10101
binaryNumber2 = 10001
进位= 0
迭代1:
1010 1
1000 1
进位+
二进制数1的第一个数字+二进制数2的第一个数字0 +1 + 1 = 10(这是一个二进制数),这里是进位+总和的组合。所以在这里进行如下求和。
进位= 1
首位总和= 0
迭代2:
101 0 1
100 0 1
进位(来自上一步)+二进制数
1的第二位+二进制数2的第二位1 + 0 + 0 = 01
进位= 0
第二位总和= 1
迭代3:
10 1 01
10 0 01
进位(来自上一步)+二进制数
1的第三位+二进制数2的第三位0 +1 + 0 = 01
进位=
第三位总和= 1
迭代4:
1 0 101
1 0 001
进位(来自上一步)+二进制数1的第四位+二进制数2的第四位
0 + 0 + 0 = 0
进位= 0
第四位总和= 0
迭代5:
1 0101
1 0001
进位(来自上一步)+二进制数
1的第五位+二进制数2的第五位0 +1 + 1 = 10
进位= 1
第五位总和= 0
输出:
公式: 进位+所有数字总和(第五位数字总和第四位数字总和第三位数字总和第二位数字总和第一位数字总和) 100110
3.添加两个二进制数的示例程序
上面的示例值将传递给该程序并产生相同的输出。
public class AddBinaryNumbers { public static void main(String[] args) { // two binary numbers long binaryNumber1 = 10101, binaryNumber2 = 10001; // i represents the index of the finalSumOutput array. int i = 0; // carry which is to hold the value of carry. int carry = 0; // Created int array to hold the output binary number int[] finalSumOutput = new int[10]; while (binaryNumber1 != 0 || binaryNumber2 != 0) { finalSumOutput[i++] = (int) (carry + (binaryNumber1 % 10 + binaryNumber2 % 10) % 2); carry = (int) ((binaryNumber1 % 10 + binaryNumber2 % 10 + carry) / 2); binaryNumber1 = binaryNumber1 / 10; binaryNumber2 = binaryNumber2 / 10; } if (carry != 0) { finalSumOutput[i++] = carry; } --i; System.out.print("Output: "); // printing from the last index to 0. while (i >= 0) { System.out.print(finalSumOutput[i--]); } System.out.print("\n"); } }
输出:
100110
4.添加二进制数的第二种方法
Java API Integer类具有parseInt()方法,该方法采用字符串和基数。如果我们传递基数值2,则它将考虑字符串值的二进制数。接下来,我们执行sum并将输出int值传递给toBinaryString()方法,该方法将整数转换回二进制数。我们需要二进制格式的期望输出。
让我们看看下面的程序。
public class AddBinaryNumbersWay2 { public static void main(String[] args) { // two binary numbers in string format String binaryNumber1 = "10101", binaryNumber2 = "10001"; // converting strings into binary format numbers Integer integer1 = Integer.parseInt(binaryNumber1, 2); Integer integer2 = Integer.parseInt(binaryNumber2, 2); // adding two integers Integer output = integer1 + integer2; // converting final output back to Binary Integer System.out.println(Integer.toBinaryString(output)); } }
输出:
两种方法都采用相同的输入。观察者的输出也相同。两者都产生预期的结果。
100110
5.结论
在本文中,您已经学习了如何编写一个Java程序来添加两个二进制数。这可以通过两种方式完成。第一种方法是不使用任何Java API方法,而完全使用交换理论与逻辑设计(STLD)逻辑。第二种方法是使用Integer包装类基数选项。 -
二进制怎么相加减
2019-02-21 14:11:42如果两个二进制位全是0,相加的结果仍为0;而如果两个相加的二进制位均为1,则结果为10(相当于十进制中的2),也就是“逢2进1”规则,与十进制中的“逢10进1”的道理一样。 二进制的相加与十进制的相加其实很多...1.二进制加法运算法则:
0+0=0,0+1=1,1+0=1,1+1=10 ,也就是当两个相加的二进制位仅一位为1时,相加的结果为1;如果两个二进制位全是0,相加的结果仍为0;而如果两个相加的二进制位均为1,则结果为10(相当于十进制中的2),也就是“逢2进1”规则,与十进制中的“逢10进1”的道理一样。二进制的相加与十进制的相加其实很多地方是类似的。具体方法请看我下面的图解。一步一步教你学会二进制的加法。以0111+1110为例子。喜欢请看我其它经验哦。
1:先把两个数对齐,和十进制计算时候第一步一样。
2:从最右边对齐的上下两个数开始。
3:1+0=1,0+0=0.如果两个数不是都是1,那么直接相加就好。直接写在下面
4:1+1=10,把1写上面,把0写下面。
5:1 +1 +1 = 11,要注意进位。
6:依次类推,计算完成。
-
[PHP] 算法-两个n位的二进制整数相加问题PHP实现
2021-06-05 02:43:46两个n位二进制数分别存储在两个n元数组A和B中,这两个整数的和存在一个n+1元的数组C中答:此问题主要是考察相加进位的问题,元素1+1 =0 并且往前进一位ADD-BINARY(A,B)C=new integer[A.length+1]carry=0for i=A.... -
汇编语言:简单的16位二进制相加程序
2020-03-04 16:36:15功能很简单,实现两个16位二进制数相加即可。 step 1.写汇编代码 下面是实现功能的相应代码: DSEG SEGMENT DATA_1 DW ? DATA_2 DW ? DSEG ENDS SSEG SEGMENT STACK TOP_PTR DB 20 DUP(0) SSEG ENDS CSEG SEGMENT ... -
超长二进制相加,C语言实现
2016-12-17 19:47:06//虽然已经初始化,为了保险,同时,可以拓展为循环多几次干这个事情 while(second1>-1 && first1>-1){ carry = carry + add1(first[first1],second[second1]); resulte[resulte1] = (char)(carry%2 +... -
Java代码 实现两个二进制数的加法
2021-02-28 19:04:06题目要求求两个二进制数的加法算法思路:1、要定义几个参数,carry代表进位,opa代表数组a的元素转换成数字,opb代表数组b的元素转换成数字。sum代表数组的和2、判断两个字符串是否长度相同,如果不同的要从左补齐... -
将一个数字字符串变为八位二进制数然后相加,最后结果为一个二进制数相加结果
2020-04-06 12:40:23将一个数字字符串变为八位二进制数然后相加,最后结果为一个二进制数相加结果 //测试字符串 String xxx = "1234"; //将字符串转换为字符数组 char[] arr = xxx.toCharArray(); //得到数组长度,避免多次调用 ... -
2种解法 - 二进制字符串求和
2020-01-15 00:20:54使用两种解法,实现对二进制字符串求和运算... -
微机原理实验一学习记录:三个32位二进制数相加
2021-10-31 12:31:04本实验是三个32位二制数相加运算,而8086指令系统中只有16位二进制数加法指令,因此,不能直接用加法指令ADD将两个数相加。假设三个32位数分别为X、Y、Z,从原理上来说,相加的方案有两种。第一种方案,将X与Y相加完... -
二进制数的加法步骤解析
2020-11-18 17:43:00文章目录位运算二进制数加法步骤例子代码演示 二进制的加法需要用到位运算,所以先来复习下位运算。 位运算 运算 符号(java) 描述 位与 & 都为1,结果为1,否则为0。 位或 | 有一个为1或两个位都为1,... -
二进制实现加法(java)
2021-12-23 10:56:03二进制位运算实现加法(Java) -
算法导论之两个N位二进制数的相加
2020-05-20 15:08:19两个n 位的二进制数据的相加问题 Consider the problem: add two n-bit binary integers, stored in two n-element arrays A and B. The sum of the two integers should be stored in binary form in an (n+1)-... -
二进制求和(给定两个二进制字符串,返回他们的和(用二进制表示))
2021-03-09 05:40:42给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例 1:输入: a = "11", b = "1"输出: "100"示例 2:输入: a = "1010", b = "1011"输出: "10101"解题思路:将两个字符串从... -
一串十六进制求和软件 两个十六进制怎么相加的
2021-05-21 03:13:33十六进制加法逢十六进一 。...解:2+3 = 5【不满16不进】6+12 = 18 【18-16=2(满16进1)】7+5=1212+1=13=D【1是上面进的1】3+0=3结果:3D25H逢十六进一二、十六进制转换十进制16进制就是逢16进1,但我们只... -
二进制求和(Java)
2021-02-26 16:19:29字符串按字符从尾往前依次遍历,相加2.使用全加器的思想,sum=a+b+add,add表示进位,a和b表示相加的数,sum表示和全加器逻辑示意图代码实现:public class Solution {public String addBinary(String a, String b) ... -
Leetcode 1073:负二进制数相加(超详细的解法!!!)
2020-03-14 09:57:01给出基数为 -2 的两个数 arr1 和 arr2,返回两数相加的结果。 数字以 数组形式 给出:数组由若干 0 和 1 组成,按最高有效位到最低有效位的顺序排列。例如,arr = [1,1,0,1] 表示数字 (-2)^3 + (-2)^2 + (-2)^0 = -3... -
微机原理实验报告-两个多位十进制数相加实验等.doc
2021-07-17 05:14:03微机原理实验报告-两个多位十进制数相加...二、实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。三、程序流程图... -
多二进制数同步超前进位相加符号和溢出性研究 (2004年)
2021-04-29 10:18:55从两个二进制补码数相加和的符号和溢出性的判断方法入手,针对多个二进制数同步超前进位加法,定义了模 2 k + M 补码编码方案,提出了判断其加法和的符号和溢出性的方法,并进行了相应的证明 。最后,就模 2 k + M 补码... -
二进制加法运算
2021-01-17 19:08:33如果两个二进制位全是0,相加的结果仍为0;而如果两个相加的二进制位均为1,则结果为10(相当于十进制中的2),也就是“逢2进1”规则。2、二进制的减法:0-0=0,0-1=1(向高位借位) 1-0=1,1-1=0 (模二加运算或异或运算... -
LeetCode之二进制字符串相加
2016-07-13 10:24:10刚开始刷leetcode,第一道题是给两个二进制的字符串,求这两个二进制相加以后的和,输出当然也是二进制的格式了。以下是题目:/** * Given two binary strings, return their sum (also a binary string). * * ... -
两个n位二进制数相加
2014-03-19 15:10:40有两个各存放在数组A和B中的n位二进制整数,考虑他们的相加问题。 两个整数的和存放在有n+1个元素的数组C中,请给出这个问题的形式化描述,并给出伪代码。 void binaryAdd(int a[],int b[], int c[], int n) { ... -
微机原理实验报告-两个多位十进制数相加的实验等.doc
2021-06-28 05:46:43微机原理实验报告-两个多位十进制数相加的...二、实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。三、程序流程... -
二进制加法计算
2018-07-21 15:24:58计算时,先把两个二进制数对齐(如果十进制一样) 1+1为10,此时向上一位进1,0写在本位(如同十进制) 不全为1的两个数,直接相加得到结果即可。 比如数A 10111与数B01101相加 从右向左计算, 结果如下: ... -
如何以最快的速度计算出一个二进制数中1的个数
2016-10-27 16:24:20题目:如何以最快的速度计算出一个二进制数中1的个数 重点在于,这里有十亿或万亿个int数字,怎样做才能优化算法呢?解答:统计一个字节序列中1的个数,我首先想到的是最简单,把这个数每次右移一位,然后与0x01... -
微机原理实验 、两个多位十进制数相加的实验
2010-11-29 19:53:46这是微机原理的上机实验的完整源代码,希望对需要的人有帮助。程序完全运行正确,可以放心使用。 -
汇编-两个多位十进制数相加
2014-11-06 13:01:23一、实习题目两个多位十进制数相加。二、实习目的和要求 学习数据传送和算术运算指令的用法。 熟悉在PC机上建立、汇编、链接、调试和运行8088/8086汇编语言程序的过程。 三、实习内容 将两个多位十进制数相加... -
两个二进制数字求和
2020-03-27 00:39:57给定两个二进制字符串,返回他们的和(用二进制表示)。 第一反应是先把二进制字符串转化为十进制,然后计算他们的和,再把他们的和转为二进制。 //二进制转十进制 int BinaryToDecimal(string s) { int num = 0... -
二进制是如何将加减乘除变换为加法实现的
2021-07-28 07:05:09关注者151被浏览10205查看全部13个回答匿名用户5分钟教会你古中国人古埃及人和计算机如何用二进制做乘除法 。 有空整理找的“1.乘法由于计算机中,所有数值都是用2的N次方来表示的:2^n0+2^n1+2^n2+2^n3+2^n4........