题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷四则运算符号。
分析:
第一步:不考虑进位对每一位相加。0加0、1加1的结果都是0,0加1,1加0的结果都是1 。注意到,这和异或的结果是一样的。
第二步:进位,对0加0,0加1,1加0而言,都不会产生进位,只有1加1时,会向前产生1个进位。此时我们刻意想象成是两个数先做位与运算,然后再向左移动一位。
第三步:相加的过程依然是重复前面两步,知道不产生进位为止。
如下是一段基于循环实现的参考代码:
int Add(int num1, int num2)
{
int sum, carry;
do{
sum = num1 ^ num2;
carry = (num1 & num2) << 1;
num1 = sum;
num2 = carry;
}while(num2 != 0);
return num1;
}
相关题目:
不使用新的变量,变换两个变量的值。比如有两个变量a,b,希望交换它们的值。
a = a ^ b;
b = a ^ b;
a = a ^ b;