题目描述
- 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
- 地址: 牛客链接
问题分析
- 不能使用四则运算,自然而然想到使用位运算
- num1 ^ num2 可以得到 num1 与 num2 无进位相加的结果;(num1 & num2) << 1 可以得到 num1 与 num2 相加的进位信息。然后无进位相加结果与进位信息再度相加,以此迭代,直至进位信息为0,此时无进位相加结果 即为 num1 + num2
经验教训
- 如何使用位运算实现加减乘除四则运算
代码实现
public int Add(int num1,int num2) {
while (num2 != 0) {
//得到进位信息
int carry = (num1 & num2) << 1;
//得到无进位相加结果
int noCarry = num1 ^ num2;
//无进位相加结果 与 进位信息相加,直至进位信息为0
num1 = noCarry;
num2 = carry;
}
return num1;
}