题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路
利用位运算;加法分为三步:
1.两个数异或:相当于每一位相加,而不考虑进位;
2.两个数相与,并左移一位:相当于求得进位;
3.将上述两步的结果相加:没进位的和数 ^ 进位数
(从个位向前算,只要每次加出来还有进位,就一直重复上面三步骤)
实现
public class Solution {
/*利用位运算;加法分为三步:
1.两个数异或:相当于每一位相加,而不考虑进位;
2.两个数相与,并左移一位:相当于求得进位;
3.将上述两步的结果相加:没进位的和 ^ 进位
(从个位向前算,只要每次加出来还有进位,就一直重复上面三步骤)
*/
public int Add(int num1,int num2) {
while(num2!=0){ //num2=carry 只要还有进位,就一直重复三步骤
int curSum=num1^num2; //没进位的和 Step1
int carry=(num1&num2)<<1; //进位 Step2 (与运算记得加括号,&优先级低于<<)
num1=curSum; //把前两步的结果赋给num1,num2继续进入循环,执行step3
num2=carry;
}
return num1; //num1=curSum,循环结束curSum就是最终的和
}
}