位運算實現A+B

A+B單獨的通過算術運算實現是很簡單的,具體的代碼操作如下所示:

public class Solution {
    /**
     * @param a: An integer
     * @param b: An integer
     * @return: The sum of a and b 
     */
    public int aplusb(int a, int b) {
        // write your code here
        int sum;
        sum = a + b;
        return sum;
    }  
}

下面主要講的是通過位運算符實現相加操作。

思路:

不使用算術運算求和那麼只能考慮直接在二進制位上進行位運算,事實上利用異或運算(^)和與運算(&)就能完成加法運算要做的事情,其中異或運算完成相加但是不進位,而與運算計算出哪些地方需要進位,在通過左移運算(<<)就可以完成進位操作了。

例子:

先舉一個十進制加法的例子,比如4+6=10,如果不考慮進位得到的結果是2,只考慮進位得到的結果是8,加起來正好是10,對於二進制其實也是這樣的,因此我們可以將加操作和進位操作分開,二進制不進位加法其實就是異或操作,而進位操作實際上就是兩個數對應位都爲1時的左移,考慮到進位次數有限,當進位爲0時,加出來的就是答案了。

4 + 6 = 10
4的二進制:0000 0100
6的二進制:0000 0110
4 & 6 = 0000 0100  需要進位,左移一位,0000 1000
4 ^ 6 = 0000 0010

具體的代碼操作如下所示:

public class Solution {
    /**
     * @param a: An integer
     * @param b: An integer
     * @return: The sum of a and b 
     */
    public int aplusb(int a, int b) {
        // write your code here
        if(b==0) return a;
        int sum = a ^ b; //加操作
        int carry = (a & b) << 1; //進位,左移一位操作
        
        //將加操作結果與進位操作結果相加作爲最後的結果
        return aplusb(sum,carry); 
    }
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章