位運算的oj題目實例

^ 亦或 ----相當於 無進位的求和, 想象10進制下的模擬情況:(如:19+1=20;無進位求和就是10,而非20;因爲它不管進位情況)
& 與 ----相當於求每位的進位數, 先看定義:1&1=1;1&0=0;0&0=0;即都爲1的時候才爲1,正好可以模擬進位數的情況,還是想象10進制下模擬情況:(9+1=10,如果是用&的思路來處理,則9+1得到的進位數爲1,而不是10,所以要用<<1向左再移動一位,這樣就變爲10了);
這樣公式就是:(a^b) ^ ((a&b)<<1) 即:每次無進位求 + 每次得到的進位數--------我們需要不斷重複這個過程,直到進位數爲0爲止;

https://leetcode-cn.com/problems/bu-yong-jia-jian-cheng-chu-zuo-jia-fa-lcof/

寫一個函數,求兩個整數之和,要求在函數體內不得使用 “+”、“-”、“*”、“/” 四則運算符號。

class Solution {
public:
    int add(int a, int b) {
        while(b != 0){
            int temp = (a ^ b);//無進位相加
            b = (unsigned int)(a & b) << 1; //進位,注意:C++不支持負值左移!!這裏要加上unsigned int
            a = temp;
        }
        return a;
    }
};

 

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