天天看点

不用加减乘除做加法(位运算)

题目描述

写一个函数,求两个整数之和,要求在函数体内不得使用 +、-、×、÷ 四则运算符号。

样例

输入: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;
    }
};
           

继续阅读