题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
C++
class Solution {
public:
int Add(int num1, int num2)
{
while(num2 != 0){
int sum = num1 ^ num2;
int carry = (num1 & num2) << 1;
num1 = sum;
num2 = carry;
}
return num1;
}
};
思路:不用加减乘除,则使用位运算
^ :按位异或
&:按位与
<<i:左移i位,相当于乘上2的i次方
观察加法运算过程可发现,两位数加法A+B可以分成三步:
1. A ^ B 得到不包含进位的相加个位的值
2. (A&B)<< 1 得到进位值
3.重复上两步直到进位值为0,跳出循环
扩展:减法
减法相当于加上一个数的相反数,相反数可以通过所有位取反再加1得到