1、位运算
考虑到题目要求不能使用四则运算,我们可以使用位运算来实现加法。若我们不考虑进位,则加法可以直接使用异或实现: a ⊕ b a \oplus b a⊕b;因此我们只需要再表示出进位的二进制表示即可,我们可以将每一位求交后左移即可: ( a & b ) < < 1 (a \& b) << 1 (a&b)<<1。
class Solution {
public:
int add(int a, int b) {
while (b != 0) {
unsigned int carry = (unsigned int)(a & b) << 1;
a = a ^ b;
b = carry;
}
return a;
}
};