题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
总结:结合十进制来模拟二进制异或和与运算,从而完成加法。
第一步做各位相加不进位;—— 这里可以看做是异或,因为是二进制运算,0+1 = 1 ;1+0 = 1;0+0 =0;1+1 =0。
第二步做进位;—— 进行&运算左移一位,因为进位是在左边一位。
第三步把前两步结果相加。
对数字做运算,除了四则运算想到位运算。
用"^"表示不考虑进位的相加
用"&"来计算某些位发生了进位,再向左移动一位。
总结:一个数a,异或另一个数b两次,其结果还是其本身。这一点可以做数a和数b的交换。
class Solution {
public:
int Add(int num1, int num2)
{
int sum = 0,carry = 0;
while(num2!=0){
sum = num1^num2;
carry = (num1&num2) <<1;
num1 = sum;
num2 = carry;
}
return num1;
}
};