题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路
不用运算符号的计算,我们可以使用位运算。我们使用两个变量,一个记录当前位的数字,一个记录进位的数字。当进位数字不为0的条件下,迭代计算,直至进位数字为0。
代码如下
public class Solution {
public int Add(int num1,int num2) {
while(num2 != 0){
// 当前位的数字
int a = num1 ^ num2;
// 进位数字
int b = (num1 & num2) << 1;
num1 = a;
num2 = b;
}
return num1;
}
}
扩展
不使用辅助空间交换整数a和b的值。
法一(借助加法):
a = a + b
b = a - b
a = a - b
法二(借助或运算):
a = a ^ b
b = a ^ b
a = a ^ b