二进制位运算

另类加法

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;
    }
};
全部评论

相关推荐

05-02 15:59
长沙学院 Java
讲原则的小黄鸭不愿吃...:有时候面试眼缘确实很重要,当然,飞驰人生2中张弛说的很对:我努力了无数次,但是我知道机会只会出现在其中一两次。你把每一次笔试面试都全力以赴,总有你运气发挥到位的时候
点赞 评论 收藏
分享
代码飞升AL:同学院本建议你换一个项目 就算你不去特意搜也应该知道点评不能写吧 保持投递不要停 然后快速弄一个项目换上去 公司就别挑了 我第一段120一天 快速跳就行
点赞 评论 收藏
分享
评论
8
1
分享

创作者周榜

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