0
点赞
收藏
分享

微信扫一扫

剑指 Offer 65. 不用加减乘除做加法--位运算

青乌 2022-01-04 阅读 59

在这里插入图片描述
a + b = 本位 + 进位
0010 + 0011 = 0001+ 0100 = 0101

本位 = a ^ b 即异或(循环中a为本位)
进位 = (a & b) << 1 即与运算并左移一位(循环中b、c为进位)

循环的目的是一直循环可以最终导致进位为0,在此过程中a+b始终为正确的值(因为不不能用加法才这样)

class Solution {
    public int add(int a, int b) {
        while(b != 0) {
            int c = (a & b) << 1;
            a ^= b;
            b = c;
        }
        return a;
    }
}
举报

相关推荐

0 条评论