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時,會發生進位,可使用&
進行識別,再通過左移<<
得到進位數,和異或結果求和即可