天天看點

不用加減乘除做加法(位運算)

題目描述

寫一個函數,求兩個整數之和,要求在函數體内不得使用 +、-、×、÷ 四則運算符号。

樣例

輸入:num1 = 1 , num2 = 2

輸出:3

全加器,先求解不進位的和,之後求解進位。比如5+6 不進位和為011,啥時候進位:兩個數都是1的時候進位,且進位要向左移動一位,進位和為100,向左移動一位得到1000,将進位和與不進位和相加即可得到最終的和,此時進位和與非進位和是不是又可以轉化為上述過程,直到沒有進位停止循環。

class Solution {
public:
    int add(int num1, int num2){
        while(num2!=0)
        {
            int s=num1^num2;
            int carry=(num1&num2)<<1;
            num1=s;
            num2=carry;
        }
        return num1;
    }
};
           

繼續閱讀