1. A + B 问题

2018-09-04 13:18:19 浏览数 (1)

给出两个整数a和b, 求他们的和, 但不能使用 等数学运算符。 不能用求和运算符肯定就是用一些最简单的逻辑运算符实现了。 如果没有进位的情况,可以了解用异或就可以了(用或也可以,但是为了和有进位的情况统一这里还是用异或)。 主要考虑进位的情况,我们需要把其转换成没有进位的情况。考虑这么几种现象。

  1. 进行位与可以判断是否需要进位。
  2. 位异或可以处理不需要进位的哪些位。
  3. 需要进位的位可以通过位与获得。
  4. 进位的位左移一位可以与不需进位的位相加可得结果。 迭代进行上述四个过程就可以获得最终的结果,自然这个现象怎么可能是我发现的呢,来源已不可考,但是方法还是很好的,code:
代码语言:javascript复制
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
    }

0 人点赞