题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路解析
异或运算示例
0000 0011
^0000 0001
0000 0010
1. 首先将两个数字进行异或运算,得到的结果是如果两数对应位不同为1且不同为0,那么该位上对应的值相加后被保留。
与运算实例
0000 0011
&0000 0001
0000 0001
再将两个数字进行与运算,运算结果是,如果对应位都为1,那么该位在异或运算中变为0,但是需要进位。
根据上面的运算结果,我们可以将第二步运算结果向左移动1位,与第一步运算结果继续进行第一步第二步。直到第二步运算结果为0时,结束即可。代码实现
public class Solution {
public int Add(int num1,int num2) {
if(num2 == 0){
return num1;
}
// 对应位为01,10运算后结果为1,对应位为00,11运算后结果为0
int xOrResult = num1 ^ num2;
// 对应位11的抑或后需要进位
int carry = (num1 & num2) << 1;
return Add(xOrResult,carry);
}
}