LeetCode:位运算实现加法

LeetCode:位运算实现加法

写在前面

位运算符

实现加法的思路

两个加数,比如5(101)和6(110),如何不用加法就能得出两者之和呢?

我们知道二进制计算中,如果使用异或将会产生无进位的两者之和,而两数相与将会产生进位值!!!

可这样又如何呢?

1 sum = 011
2 carry =1000

两者继续异或将会产生

结果就出现了,此时无进位,所以进位为0时,sum将会为最终结果!因为此时不需要进位,异或运算就是最终结果!

优质代码

1     public int getSum(int a, int b) {
2         while(b!=0)
3         {
4             int carry = a&b;
5             a=a^b;
6             b=carry<<1;
7         }
8         return a;
9     }

参考链接

https://github.com/awangdev/LintCode/blob/master/Java/A%2BB.java

原文地址:https://www.cnblogs.com/MrSaver/p/8370812.html

时间: 2024-10-13 09:27:40

LeetCode:位运算实现加法的相关文章

Leetcode 位运算 Single Number

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Single Number Total Accepted: 20063 Total Submissions: 44658 Given an array of integers, every element appears twice except for one. Find that single one. Note: Your algorithm should have a linear

Leetcode 位运算 Single NumberII

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Single Number II Total Accepted: 14224 Total Submissions: 43648 Given an array of integers, every element appears three times except for one. Find that single one. Note: Your algorithm should have

[leetcode] Sum of Two Integers--用位运算实现加法运算

问题: Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. Example: Given a = 1 and b = 2, return 3. 分析: 这里要求我们不能用加法.减法等运算符来实现加法运算.这里应该使用位运算来实现加法运算,实际上,这也是计算机CPU内部实现加法运算的方案. x XOR y真值表: x y output 0 0 0 0 1 1

位运算计算加法

int add(int a, int b) { int wei = 0; int jinwei = 0; do { wei = a^b;//处理位加法 jinwei = (a&b) << 1; a = wei; b = jinwei; } while (b != 0); return a; } 两个数相加=两个数亦或(相当于不考虑进位之和)+与左移一位(加上进位的和):

BitMap - leetcode [位运算]

136. Single Number 因为A XOR A = 0,且XOR运算是可交换的,于是,对于实例{2,1,4,5,2,4,1}就会有这样的结果: (2^1^4^5^2^4^1) => ((2^2)^(1^1)^(4^4)^(5)) => (0^0^0^5) => 5异或:异为1 137. Single Number II(黑人问号脸) 对于除出现一次之外的所有的整数,其二进制表示中每一位1出现的次数是3的整数倍,将所有这些1清零,剩下的就是最终的数.用ones记录到当前计算的变量

371.用位运算实现加法 Sum of Two Integers

Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. Example:Given a = 1 and b = 2, return 3. Credits:Special thanks to @fujiaozhu for adding this problem and creating all test cases. Subscribe to see which

位运算实现加法运算

Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. Example:Given a = 1 and b = 2, return 3. int getSum(int a, int b) { int ans; while(b) { ans = a^b; b = (a&b)<<1; a = ans; } return ans; } 参考: http://

位运算总结&amp;拾遗

JavaScript 位运算总结&拾遗 最近补充了一些位运算的知识,深感位运算的博大精深,此文作为这个系列的总结篇,在此回顾下所学的位运算知识和应用,同时也补充下前文中没有提到的一些位运算知识. 把一个数变为大于等于该数的最小的2的幂 一个数为2的幂,那么该数的二进制码只有最高位是1. 根据这个性质,我们来举个栗子,比如有数字10,转为二进制码后为: 1 0 1 0 我们只需把 0 bit的位置全部用1填充,然后再把该二进制码加1就ok了.而x | (x + 1)正好可以把最右边的0置为1,可是

位运算的骚操作

位运算的骚操作(一)之四则运算 ? 可以这样说,位运算是我们刚开始学计算机就会接触到的一种东西.那么位运算这么常见,我们是否可以使用它来做一些骚操作呢? 使用的运算符包括下面(java还有一个>>>无符号右移): 含义 运算符 例子 左移(后面补0) << 0011 => 0110 右移(正数前面补0,负数补1) >> 0110 => 0011 按位或 ︳ 0011 ------- => 1011 1011 按位与 & 0011 ----