(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;
    }
};
相关推荐
阿猿收手吧!13 小时前
【C++】C++模板特化:精准定制泛型逻辑
开发语言·c++·算法
智驱力人工智能13 小时前
货车走快车道检测 高速公路安全治理的工程实践与价值闭环 高速公路货车占用小客车道抓拍系统 城市快速路货车违规占道AI识别
人工智能·opencv·算法·安全·yolo·目标检测·边缘计算
喵手13 小时前
Python爬虫实战:电商实体消歧完整实战 - 从混乱店铺名到标准化知识库的工程化实现,一文带你搞定!
爬虫·python·算法·爬虫实战·零基础python爬虫教学·同名实体消除·从混乱店铺名到标准化知识库
weixin_4521595513 小时前
C++与Java性能对比
开发语言·c++·算法
80530单词突击赢13 小时前
C++哈希表实现:开散列与闭散列详解
算法·哈希算法·散列表
Timmylyx051813 小时前
类欧几里得学习笔记
笔记·学习·算法
wangluoqi13 小时前
26.2.2练习总结
算法
2301_7657031413 小时前
C++中的工厂模式实战
开发语言·c++·算法
鱼跃鹰飞13 小时前
Leetcode:97.交错字符串
linux·服务器·leetcode
星火开发设计14 小时前
C++ 输入输出流:cin 与 cout 的基础用法
java·开发语言·c++·学习·算法·编程·知识