【Leetcode每日一题】 位运算 - 两整数之和(难度⭐)(37)

1. 题目解析

题目链接:371. 两整数之和

这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。

2.算法原理

算法的核心思路其实可以类比为我们小时候学习的加法运算。只不过这次,我们不是在纸上用铅笔算,而是在计算机里用二进制数字来进行。这个算法巧妙地利用了异或(^)和按位与(&)这两种位运算来实现二进制数的加法。

  1. 异或运算:模拟不进位的加法

异或运算在二进制的世界里,就像是两个小朋友在做加法,但他们只关心当前位的和,不考虑进位。比如,1 + 1 在十进制里是2,但在异或运算里,1 ^ 1 等于 0,就像两个小朋友说:“我们这一位加起来是0,不用进位哦!”同样地,0 ^ 0、0 ^ 1、1 ^ 0 都分别等于 0、1、1,就像是他们正确地计算出了每一位的和。

  1. 按位与运算:找出需要进位的位

但是,小朋友们也知道,有时候加法是需要进位的。这时候,按位与运算就像是另一个小朋友,专门负责找出哪些位需要进位。比如,1 & 1 在二进制里是1,这意味着这一位两个小朋友加起来满2了,需要向高位进1。而0 & 0、0 & 1、1 & 0 都等于0,表示这些位不需要进位。

  1. 循环进行,直到没有进位

有了这两个小朋友(异或和按位与),我们就可以开始计算加法了。首先,我们用异或运算得到当前不考虑进位的和。然后,我们用按位与运算找出哪些位需要进位。如果发现有进位,我们就把这些进位加到下一轮的运算中。这样一轮一轮地进行,直到所有的进位都处理完,也就是按位与的结果变成0,我们就得到了最终的和。

这个算法虽然看起来有些复杂,但其实非常高效。因为它直接在二进制位上进行操作,避免了十进制加法中可能需要的多次进位和借位。在计算机内部,这种位运算的速度是非常快的,所以这种算法在处理大量数据时特别有用。

3.代码编写

class Solution 
{
public:int getSum(int a, int b) {while(b != 0){size_t x = a ^ b;size_t y = (size_t)(a & b) << 1;a = x;b = y;}return a;}
};
The Last

嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。

觉得有点收获的话,不妨给我点个吧!

如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/543484.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker容器化技术(使用Dockerfile制作镜像)

Docker中的镜像分层 Docker 支持通过扩展现有镜像&#xff0c;创建新的镜像。实际上&#xff0c;Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。 1、Docker 镜像为什么分层 镜像分层最大的一个好处就是共享资源。 比如说有多个镜像都从相…

物联网竞赛板CubMx全部功能简洁配置汇总

目录 前言&#xff1a;1、按键&LED灯配置&#xff1a;2、OLED配置&#xff1a;3、继电器配置&#xff1a;4、LORA模块配置&#xff1a;5、矩阵模块&#xff1a;6、串口模块&#xff1a;7、RTC配置&#xff1a;8、ADC模块配置&#xff1a;9、温度传感器模块&#xff1a;后续…

【矩阵】240. 搜索二维矩阵 II【中等】

搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a;每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22…

ubuntu下docker安装

目录 官网链接 安装步骤 docker使用方法 拉取镜像 创建镜像 运行镜像 查看运行结果 保存镜像文件 传输到windows下 官网链接 Install Docker Engine on Ubuntu | Docker Docs 安装步骤 1.运行以下命令卸载所有冲突的包&#xff1a; for pkg in docker.io docker-d…

Oracle数据库:使用 bash脚本 + 定时任务 自动备份数据

Oracle数据库&#xff1a;使用 bash脚本 定时任务 自动备份数据 1、前言2、为什么需要自动化备份&#xff1f;3、编写备份脚本4、备份脚本授权5、添加定时任务6、重启 crond / 检查 crond 服务状态7、备份文件检查 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收…

c++入门你需要知道的知识点(下)

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 今日主菜&#xff1a;c入门 主厨&#xff1a;邪王真眼 所属专栏&#xff1a;c专栏 主厨的主页&#xff1a;Chef‘s blog 前言&#xff1a; 上次我们通过c入…

编程入行指南:从代码小白到技术大牛的“码农”奇幻漂流

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 在这个飞速发展的信息时代&#xff0c;技术不断推陈出新&#xff0c;程序员若想保持行业翘楚地位&#xff0c;必须持续汲取新知、…

柚见十三期(优化)

前端优化 加载匹配功能与加载骨架特效 骨架屏 : vant-skeleton index.vue中 /** * 加载数据 */ const loadData async () > { let userListData; loading.value true; //心动模式 if (isMatchMode.value){ const num 10;//推荐人数 userListData await myA…

3.2_5 内存映射文件

文章目录 3.2_5 内存映射文件&#xff08;一&#xff09;传统的文件访问方式&#xff08;二&#xff09;内存映射文件&#xff08;Memory-Mapped Files&#xff09; 总结 3.2_5 内存映射文件 &#xff08;一&#xff09;传统的文件访问方式 磁盘的存储是以块为单位的&#xff0…

数据分析-Pandas如何观测数据的中心趋势度

数据分析-Pandas如何观测数据的中心趋势度 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据…

公众号留言功能恢复了,你的开通了吗?

了解公众号的人都知道&#xff0c;腾讯在2018年3月宣布暂停新注册公众号的留言功能&#xff0c;这之后注册的公众号都不具备留言功能。 这成了很多号主运营人的一块心病&#xff0c;也包括我。 没有留言&#xff0c;就好似一个人玩单机游戏&#xff0c;无法与读者互动&#xff…

柚见第十二期(随机匹配)

随机匹配 目的 为了帮大家更快地发现和自己兴趣相同的朋友 问题 匹配 1 个还是匹配多个&#xff1f; 答&#xff1a;匹配多个&#xff0c;并且按照匹配的相似度从高到低排序 怎么匹配&#xff1f;&#xff08;根据什么匹配&#xff09; 答&#xff1a;标签 tags 还可以根据 us…