(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;
    }
};
相关推荐
行云流水62613 小时前
前端树形结构实现勾选,半勾选,取消勾选。
前端·算法
laocooon52385788613 小时前
一个C项目实现框架
c语言·算法
c#上位机14 小时前
halcon图像增强——图像取反
图像处理·算法·c#·halcon
zheyutao14 小时前
割点和桥
算法·图论
@小码农15 小时前
2025年北京海淀区中小学生信息学竞赛第二赛段C++真题
开发语言·数据结构·c++·算法
蓝域小兵15 小时前
齐次方程组和非齐次方程组有什么区别
人工智能·算法·机器学习
0 0 015 小时前
CCF-CSP第39次认证第三题——HTTP 头信息(HPACK)【C++】
开发语言·c++·算法
Data_agent15 小时前
1688按图搜索1688商品(拍立淘)API ,Python请求示例
爬虫·python·算法·图搜索算法
汉克老师15 小时前
2023年海淀区中小学信息学竞赛复赛(小学组试题第二题 回文时间 (time))
c++·算法·北京海淀中小学信息竞赛·模拟法
代码雕刻家16 小时前
1.9.课设实验-数据结构-图-校园跑最短路径
c语言·数据结构·算法·图论