题目描述: 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
我们可以先来观察一个计算式(都用二进制表示) 8 : 1 0 0 0 7 : 0 1 1 1 /--------------- & : 0 0 0 0 ^ : 1 1 1 1 /---------------- 8 : 1 0 0 0 从上边简单的例子可以看出,可以通过简单的按位与操作,就可以达到整数的加减乘除。
但是值得注意的是,如果按位与产生了 1 该怎么解决。下面看个简单的例子: 10: 1 0 1 0 7 : 0 1 1 1 /--------------- & : 0 0 1 0 ^ : 1 1 0 1 /--------------- 17:0001 0001 这个时候怎么办呢?这个时候就要巧妙地运用移位操作 >>,解决办法如下代码。
public static int Add(int num1
, int num2
) {
int sum
= 0;
int carry
= 0;
do {
sum
= num1
^ num2
;
carry
= (num1
& num2
) << 1;
num1
= sum
;
num2
= carry
;
} while (num2
!= 0);
return num1
;
}