题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
解析
由于题目要求不能使用四则运算,那么就需要考虑使用位运算。两个数相加可以看成两个数的每个位先相加,但不进位,
然后在加上进位的数值,如12+8可以看成1+0=1 2+8=0,由于2+8有进位,所以结果就是10+10=20
二进制中可以表示为1000+1100 先每个位置相加不进位,则0+0=0 0+1=1 1+0=1 1+1=0这个就是按位异或运算^.
对于1+1出现进位,我们可以使用按位与运算&然后再将结果左移一位。最后将上面两步的结果相加,
相加的时候依然要考虑进位的情况,直到不产生进位。
public class Solution {
public int Add(int num1,int num2) {
while(num2!=0){
int temp = num1^num2;
num2 = (num1&num2)<<1;
num1 = temp;
}
return num1;
}
}