二进制位运算

另类加法

http://www.nowcoder.com/questionTerminal/e7e0d226f1e84ba7ab8b28efc6e1aebc

思路

试想二进制01011101的相加过程
0 1 0 1
1 1 0 1
其实可以看成是不带进位的结果1000和进位产生的1010相加。

而“不带进位的加法”其实就是异或运算,“进位”其实就是只有两个1的时候才会出现,也就是运算,只是因为进了一位,所以还要往左移动一位。

这样就将两个数相加通过位运算转换成了不带进位的加法结果和进位相加的问题,反复进行下去,最后只要没有进位了,相加的结果也就得到了。

程序

class UnusualAdd {
public:
    int addAB(int A, int B) {
        while(B!=0) {
            int t = A^B;
            B = (A&B)<<1;
            A = t;
        }
        return A;
    }
};
全部评论

相关推荐

07-14 12:22
门头沟学院 Java
点赞 评论 收藏
分享
07-15 12:15
门头沟学院 Java
点赞 评论 收藏
分享
06-02 15:53
阳光学院 Java
点赞 评论 收藏
分享
评论
8
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务