题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
不能使用四则运算,就只能使用位运算。在二进制中,两数相加相当于两个数的二进制进行异或运算。考虑到进位问题,异或运算得到的结果其实是本位,例如1^1 = 0,其进位1被忽略了。需要再算一次进位,二进制中只有两个1相加时才可能有进位1,因此进位的结果相当于两个数做与运算然后左移一位。
例如计算 1 + 1 = 2。相当于先计算本位 1 ^ 1 = 0,然后计算进位 1 & 1 = 1,1 « 1 = 10,然后进位和本位相加 0 ^ 10 = 10,结果即为2。
public class Solution {
public int Add(int num1,int num2) {
while (num2 != 0) { // 循环到没有进位为止
int sum = num1 ^ num2; // 本位
num2 = (num1 & num2) << 1; // 进位
num1 = sum;
}
return num1;
}
}





近期评论