剑指 Offer 65. 不用加减乘除做加法
解题思路
本题考的是位运算。
前置知识:
- ^ 亦或 —-相当于 无进位的求和
- 与(&) 然后左移(<<)—-相当于求每位的进位数
来解释一下上面的前置知识:
再来举个例子看看(假如数字是十进制):
代码
class Solution {
public int add(int a, int b) {
while (b != 0) {// 当进位为 0 时跳出
//一轮过后。a=tempSum b=carraySum.即进位数字加上无需进位的数字
int tempSum = a ^ b;
int carrySum = (a & b) << 1;
a = tempSum;
b = carrySum;
}
return a;
}
}