• 【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.代码编写

    1. class Solution
    2. {
    3. public:
    4. int getSum(int a, int b)
    5. {
    6. while(b != 0)
    7. {
    8. size_t x = a ^ b;
    9. size_t y = (size_t)(a & b) << 1;
    10. a = x;
    11. b = y;
    12. }
    13. return a;
    14. }
    15. };
    The Last

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

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

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

  • 相关阅读:
    git上传代码到GitHub
    10分钟读懂数据响应式和双向绑定原理
    Spring Boot2.x 学习导航大纲-Boot整套前端由0到1(关注收藏本博文即可)
    显示今天的年、月、日日期、时间的数据处理timetuple()
    Flink从入门到放弃—Stream API—Join实现(即多流操作)
    SpringBoot Kafka消费者 多kafka配置
    Homeassistant docker配置
    Linux命令200例:compress用来对文件进行压缩和解压缩
    GEE遥感云大数据林业应用典型案例实践及GPT模型应用
    YOLOv5-QAT量化部署
  • 原文地址:https://blog.csdn.net/m0_73150338/article/details/136763059