public static int add(int a, int b) {
int sum = a^b;
int carry = (a & b) << 1;
if(carry == 0) {
return sum;
}
return add(sum,carry);
}
原理:主要使用按位运算符中的异或运算符^
和与运算符&
^
:相同为0,相异为1;&
:同是1 才为1,其他都为0,和逻辑与类似,可以把1看作true;
二进制的加法运算,和异或操作非常相似,以4位为例
加法 | 异或 |
---|---|
0110 | 0110 |
0101 | 0101 |
1011 | 0011 |
从上可以看到,加法操作和异或的区别就在于进位,加法会进位,而异或没有,那么异或加上进位数不就可以了
怎么求进位数?
当都为1时,会发生进位,可使用&
进行识别,再通过左移<<
得到进位数,和异或结果求和即可