剑指 Offer 65. 不用加减乘除做加法 - 力扣(LeetCode) (leetcode-cn.com)
目录
运行结果
思路
加法可以分解为两个步骤:
1. 各位相加,忽略进位;可以使用异或^来完成。
2. 把上一步取得的结果加上所有的进位;可以使用&和<<来完成。
如此循环直到不再产生进位为止
代码
注意:有符号类型数据的移位是算数移位,unsigned类型数据的移位是逻辑移位。逻辑移位如果溢出,不会报错。
class Solution {
public:
int add(unsigned a, unsigned b) {
unsigned res, carry;
while (carry) {
res = a ^ b;
carry = (a & b) << 1;
a = res;
b = carry;
}
return res;
}
};