题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
分析:
不用四则运算符号,考虑二进制位运算。考虑做加法的时候,二进制1与1变0,0与1变1,0与0变0,与^运算一致。然而还有进位问题,考虑到进位出现的情况为1与1,因此若两个数相与若为不为0,则需要进位,把这个结果左移1位,与上面^运算的结果相加则可。而这个相加和上述描述一致,是个循环(递归)的过程,结束条件为进位为0。
代码:
int Add(int num1, int num2)
{
int base = num1 ^ num2;
int add = (num1 & num2)<<1;//进位
while(add){
num1 = base;
num2 = add;
base = num1 ^ num2;
add = (num1 & num2)<<1;
}
return base;
}