一.题目:
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
二.知识点:
二进制转换
三.思路:
& 按位与运算:相同位的两个数字都为1,则为1;若有一个不为1,则为0。两个数相与,并左移一位:相当于求得进位(如:1&1=1 将1左移一位变成了10,相当于拿到了进位。)
^ 按位异或运算:相同位置不同则为1,相同则为0。相当于每一位相加,而不考虑进位。
第一步 异或—无进位相加得result1 (a^b)
第二步 与+左移一位—求得进位result2 (a&b)<<1
第三步 result = result1 + result2即是结果,但问题在于,result1 + result2可能还有进位,因此result还要重复一二步这个过程。直到没有进位,异或的结果就是最终的结果为止
四.解答:
public class Solution {
public int Add(int num1,int num2) {
int sum1,sum2;
while(num2!=0){
sum1=num1^num2;
sum2=(num1&num2)<<1;
num1=sum1;
num2=sum2;
}
return num1;
}
}