题目描述:
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
分析及代码如下:
首先明确如果不能用加减乘除的话,就只能用位运算
基本的思路是这样的:
1.当前位的计算结果,相当于二进制的异或,记作sum
2.进位的计算结果,相当于二进制的与,再左移一位,记作carry
分别进行的当前位计算和进位计算,直接一次相加,无法解决问题
所以要用do-while循环多次相加,直到carry=0
举例:123+359
则num1=123,num2=359
第1次计算后,sum=472 carry=001<<1=010
更新数值num1=sum=472,num2=carry=010
第2次计算后,sum=482,carry=000无进位,while循环结束
public class Solution {
public int Add(int num1,int num2) {
int sum,carry;
do{sum=num1^num2;
carry=(num1&num2)<<1;
num1=sum;
num2=carry;//使得sum+carry,在循环中实现递归
}while(carry!=0);
return sum;
}
}