(leetcode算法题)371. 两整数之和

只使用 按位异或 和 按位与 和 左移操作,就能够实现两整数相加,不需要加减系列运算符

具体的原理如下,

首先a + b = (a ^ b) + ((a & b) << 1)

这是因为根据异或的定义,两个二进制数异或的结果实际上就是这两个数按照竖式计算时无进位相加的结果

而(a & b) << 1 就是两个数相加时产生的进位按位放置得到的结果,比如以103104 + 11408为例

0000 0000 0000 0000 0000 0001 0000 0000就是这两个数相加时会在第8位相加的时候因为产生了进位,而在第9位添加一个进位1

那么怎么来计算(103106 ^ 11408)+ ((103106 & 11408) << 1)?

还是使用相同的计算方法绕开 加法

即实现一个循环,直到进位为0时就可以结束循环

cpp 复制代码
class Solution {
public:
    int getSum(int a, int b) {
        while (b){
            int tmp1 = a ^ b;
            b = (a & b) << 1;
            a = tmp1;
        }
        return a;
    }
};
相关推荐
AndrewHZ4 分钟前
【遥感图像入门】遥感图像专用去噪算法:核心方案与实战(PyTorch代码)
pytorch·算法·计算机视觉·cv·遥感图像·高分辨率·去噪算法
前端小L1 小时前
回溯算法专题(八):精细化切割——还原合法的「IP 地址」
数据结构·算法
Hcoco_me7 小时前
大模型面试题17:PCA算法详解及入门实操
算法
跨境卫士苏苏7 小时前
亚马逊AI广告革命:告别“猜心”,迎接“共创”时代
大数据·人工智能·算法·亚马逊·防关联
云雾J视界8 小时前
当算法试图解决一切:技术解决方案主义的诱惑与陷阱
算法·google·bert·transformer·attention·算法治理
Xの哲學8 小时前
Linux Miscdevice深度剖析:从原理到实战的完整指南
linux·服务器·算法·架构·边缘计算
夏乌_Wx8 小时前
练题100天——DAY23:存在重复元素Ⅰ Ⅱ+两数之和
数据结构·算法·leetcode
立志成为大牛的小牛9 小时前
数据结构——五十六、排序的基本概念(王道408)
开发语言·数据结构·程序人生·算法
沿着路走到底9 小时前
将数组倒序,不能采用reverse,算法复杂度最低
算法