题目
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
需要掌握
1、异或运算 两个数不相同,结果为1。两个数相同,结果为0。 2、与运算 两位同时为“1”,结果才为“1”,否则为0 3、左移 将一个二进制操作数对象按指定的移动位数向左移,左边溢出的位数被丢弃,右边的空位用0补充。 4、计算机二进制加法运算:
思路
第一步
将两个数进行异或运算,此时得到的结果相当于不进位进行的加法运算
第二步
将两个数进行与运算,并将其结果进行左移得到最后的结果
第三步
将第一步的结果与左移后的结果进行异或得到的最终结果为终值
第四步
重复操作,直到当与运算的结果为0,则异或运算的结果则为两个加数的和所对应的二进制数
代码
class Solution {
public:
int Add(int num1
, int num2
)
{
while (num1
!= 0)
{
int add
= (num1
^num2
);
num1
= (num1
&num2
) << 1;
num2
= add
;
}
return num2
;
}
};