給出兩個整數a和b, 求他們的和, 但不能使用 +
等數學運算符。
注意事項
你不需要從輸入流讀入數據,只需要根據aplusb
的兩個參數a和b,計算他們的和並返回就行。
a和b都是 32位
整數麼?
- 是的
我可以使用位運算符麼?
- 當然可以
位運算實現整數加法本質就是用二進制進行運算。
其主要用了兩個基本表達式:
x^y //執行加法,不考慮進位。
(x&y)<<1 //進位操作
令x=x^y ;y=(x&y)<<1 進行迭代,每迭代一次進位操作右面就多一位0,
最多需要“加數二進制位長度”次迭代就沒有進位了,此時x^y的值就是結果。
我們來做個3位數的加法:
101+011=1000 //正常加法
位運算加法:
(1) 101 ^ 011 = 110
(101 & 011)<<1 = 010
(2) 110 ^ 010 = 100
(110 & 010)<<1 = 100
(3) 100 ^ 100 = 000
(100 & 100)<<1 = 1000
此時進行相加操作就沒有進位了,即000 ^ 1000=1000即是最後結果。
*/
class Solution {
public int aplusb(int a, int b) {
while(b != 0){
int carry = a & b;
a = a ^ b;
b = carry << 1;
}
return a;
}
}