https://leetcode-cn.com/problems/bu-yong-jia-jian-cheng-chu-zuo-jia-fa-lcof/
题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
输入输出样例
输入: a = 1, b = 1
输出: 2
题解
考察的是位运算的熟悉程度,
^
得到二进制中不相同的位(非进位和)
&
得到二进制中相同的1位(进位和)
以 2+3
为例:
2: 0010
3: 0011
a= 2^3 = 0001
------------------------------ 2&1 = 0010
b = (2&1)<<1(进位) = 0100
a^b = 0101
------------------------------ a&b = 0000(进位和为0,退出)
最后返回 5 ==>0101
代码:
class Solution {
public int add(int a, int b) {
if(b == 0)
return a;
// a^b得到的是去除重复位的结果(相加结果)
// a&b得到的是重复的位,>>1代表向左移动一位(进位和)
return add(a^b, (a&b)<<1);
}
}