题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
分析:
- 不能+、-、*、/,则能用于数字计算的只有位运算。
- 第一步不考虑进位对每一位相加。0+0,1+1都为0,0+1,1+0都为1,这和异或^的运算结果一样。
- 第二步只考虑进位,对0+1,1+0,0+0都为0,只有1+1为1,并且往左进位为10.
- 重复上述,直到不进位,即进位数为0。
例子:5+7=12 5:101 7:111
第一步: 5^7=101^111=010
第二步:(5&7)<<1=1010
第一步:1010^010=1000
第二步:(1010&010)<<1=100
第一步:1000^100=1100=12
第二步:(1000&100)<<1=0,跳出并返回1100,即12
public int Add(int num1,int num2) {
while(num2!=0){
//记录不进位之和
int temp=num1^num2;
num2=(num1&num2)<<1;
num1=temp;
}
return num1;
}