题目描述
写一个函数,求两个整数数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
解题思路分析
同样的,跟我们手动算加法一样
- 先直接将两个数相加起来,使用位移运算^,如5+17,5的二进制为101,17的二进制为10001,使用^运算之后为10100
- 接下来计算进位,使用&运算之后并向左移一位,5&17为01,向左移一位为10,接下来将前一步^计算得到的值一直重复这两不下去,直到进位为0则结束
代码实现
public int add(int num1, int num2) {
int sum, carry;
do {
sum = num1 ^ num2;//计算第一步^
carry = (num1 & num2) << 1;//计算进位
num1 = sum;
num2 = carry;
} while (num2 != 0);//进位为0时结束
return num1;
}