给出两个整数a和b, 求他们的和, 但不能使用 等数学运算符。 不能用求和运算符肯定就是用一些最简单的逻辑运算符实现了。 如果没有进位的情况,可以了解用异或就可以了(用或也可以,但是为了和有进位的情况统一这里还是用异或)。 主要考虑进位的情况,我们需要把其转换成没有进位的情况。考虑这么几种现象。
- 进行位与可以判断是否需要进位。
- 位异或可以处理不需要进位的哪些位。
- 需要进位的位可以通过位与获得。
- 进位的位左移一位可以与不需进位的位相加可得结果。 迭代进行上述四个过程就可以获得最终的结果,自然这个现象怎么可能是我发现的呢,来源已不可考,但是方法还是很好的,code:
int aplusb(int a, int b) {
int c=0,d=0;
while((a&b)!=0) //有进位的情况
{
c=a^b; //不考虑进位,亦或就可以
d=(a&b)<<1; //进位的情况,
a=c;
b=d; //这是一个递归,如果移位之后还要进位,再进行处理
}
return a|b; //处理完了就是没有进位了,这样按位取或就可以了
// write your code here
}