二进制加法

基本思路是这样的:【看这里,一语道破天机

考虑二进制加法的过程,

步骤一、A^B,能够得到没有进位的加法。

步骤二、A&B,能够得到相加之后,能够进位的位置的信息。向左移动一位,就是两个二进制数相加之后的进位信息。所以,(A&B)<<1就是两个二进制数相加得到的“进位结果”。

步骤三、将前两步的结果相加。相加的过程就是步骤一和步骤二,直到不再产生进位为止。

int Add(int num1,int num2)
{
	int sum,carry;
	do
	{
		sum=num1^num2;//得到没有进位的加法
		carry=(num1&num2)<<1;//得到的“进位结果”
        num1=sum;
        num2=carry;
	} while(num2!=0);//直到不再产生进位为止
	return num1;
}
int main()
{
  int nun1=18;
  int nun2=20;
  int sum=Add(nun1,nun2);
  return 0;
}
时间: 2025-01-04 15:31:26

二进制加法的相关文章

【LeetCode-面试算法经典-Java实现】【067-Add Binary(二进制加法)】

[067-Add Binary(二进制加法)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given two binary strings, return their sum (also a binary string). For example, a = "11" b = "1" Return "100" 题目大意 给定两个二进制的字符串,返回它们的和,也是二进行制字符串. 解题思路 先将对应的两个二进制字符串

leetCode 67.Add Binary (二进制加法) 解题思路和方法

Given two binary strings, return their sum (also a binary string). For example, a = "11" b = "1" Return "100". 思路:二进制加法,比较简单.代码如下: public class Solution { public String addBinary(String a, String b) { int len = Math.max(a.len

[Leetcode] add binary 二进制加法

Given two binary strings, return their sum (also a binary string). For example,a ="11"b ="1"Return"100". 题意:将两个以字符串形式保存的二进制数进行相加. 思路:其实不管是以数组.字符串形式,加或者乘(multiply strings),一般的思路都是从后往前计算,用一个中间变量保存相加或者相乘的结果(加法是一个变量int 或string就行,

[leetcode]67. Add Binary 二进制加法

Given two binary strings, return their sum (also a binary string). The input strings are both non-empty and contains only characters 1 or 0. Example 1: Input: a = "11", b = "1" Output: "100" Example 2: Input: a = "1010&q

模拟二进制加法

#include <bits/stdc++.h> using namespace std; void dfs( int index , int a[] , int n ){ if( index == n ){ for( int i = 0 ; i < n ; i ++ ) cout << a[i]; cout << endl; return; } for( int i = 0 ; i < 2 ; i ++ ){ a[index] = i; dfs( inde

[c++]用字符串实现二进制的加法

题目描述: Given two binary strings, return their sum (also a binary string). The input strings are both non-empty and contains only characters 1 or 0. 题目来源:leetcode 思路: 计算机二进制加法运算: 计算机计算二进制加法是分三部,第一步为将两个加数转换为二进制数,计算两个加数不需要进位的和(利用异或运算 ^ ),得出的结果.第二部将两个加数进行

二进制思惟以及数据的存储

我们平常运用的数字多是由 0~9 共十个数字构成的,例如 1.9.10.297.952 等,一个数字最多能表现九,假如要表现十.十一.二十九.一百等,就需求多个数字组合起来.例如表现 5+8 的后果,一个数字不敷,只能"进位",用 13 来表现:这时"进一位"相当于十,"进两位"相当于二十.由于逢十进一,也由于只要 0~9 共十个数字,所以叫做十进制(Decimalism).进制也就是进位制.在停止加法(减法)运算时,逢X进(借)一就是X进制,这

不用加减乘除实现两个正整数的加法

很常见的一道题,网上也有各种各样的解法,备忘一下. 首先来看十进制整数的加法,123 + 999,将其分为三步来运算: (1)对每一位相加,不考虑进位.当有进位时,舍弃.如下: 123 +   999 =   012 (2)考虑进位的影响.观察可发现,当个位相加有进位时,实际上少加了10,当百位有进位时,实际上少加了100,依次类推.因此,第二步操作我们得到因为没考虑进位少加的数.当没有进位时为0,当有进位时,舍弃个位,留下十位.比如5 + 6 = 11,舍弃个位,留下十位,为1,即 5 + 6

C语言博客(4)编程基础之怎样理解二进制思想以及数据的存储?

本次我要描述的编程基础的内容是怎样理解二进制思想以及数据的存储,这也是许多初学者需要的编程基础. 我们平时使用的数字都是由 0~9 共十个数字组成的,例如 1.9.10.297.952 等,一个数字最多能表示九,如果要表示十.十一.二十九.一百等,就需要多个数字组合起来. 例如表示 5+8 的结果,一个数字不够,只能"进位",用 13 来表示:这时"进一位"相当于十,"进两位"相当于二十. 因为逢十进一,也因为只有 0~9 共十个数字,所以叫做十