一刷剑指offer(47)——不用加减乘除做加法
程序员文章站
2022-07-10 20:23:08
...
题目:
写一个函数,求两个整数之和,要求在函数体内不得使用加减乘除四则运算符号。
求两数之和四则运算不可用,也就是说,只能用位运算。
分析一下十进制加法的步骤:
1、各位相加不进位
2、做进位
3、将前面两个结果加起来
转换成位运算:
1、不考虑进位,0+0=0,1+1=0,0+1=1,1+0=1,显然为异或运算。
2、只有1+1才会产生进位,可以想象成两个数先做位与运算,然后再向左移动一位。
3、把前面两个步骤结果相加
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;
}