题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
解题思路:
考察的是或,与,异或运算,移位操作(计算机组成原理)
异或:非进位上加法
与:需进位位上加法
数字A,B,先异或A^B,在与并移一位(A&B)<<1,直到(A&B)<<1 结果为0,说明不再有进位,获得最终结果。
犯错之处:没有移位;判断条件考虑错误
Java代码:
public class Solution {
public int Add(int num1,int num2) {
while(num2!=0){
int tmp=num1 ^ num2;
num2=(num1 & num2)<<1;
num1=tmp;
}
return num1;
}
}
拓展:减法(a-b=a+(-b)) ,其中-b是b的取反+1,即-b=~b+1