移位:
因为力扣编C++译器对于最大负数(也就是-2147483648),移位会会报错,所以在与之后将负数转换为 unsigned int 类型
a ^ b a异或b,保留a与b不重合的二进制部分
a & b a与b,保留a和b重合的二进制 部分,再移位,则表示二进制的进位
class Solution {
public:
int add(int a, int b) {
return b == 0 ? a : add(a ^ b, (unsigned int)(a & b) << 1);
}
};