博客
关于我
【leetcode】 两整数之和, 不用+-号,如何实现两数相加
阅读量:547 次
发布时间:2019-03-09

本文共 2760 字,大约阅读时间需要 9 分钟。

Adding Two Integers Without Using '+' or '-' Operators

Adding two integers without using the '+' or '-' operators can be achieved using bitwise operations. The approach leverages the properties of the XOR and AND operators to simulate the addition process. Here's a detailed explanation of the method and a Python implementation.


Conceptual Understanding

In binary addition, each bit is processed from the least significant bit (LSB) to the most significant bit (MSB). When adding two bits:

  • XOR Operation: This gives the sum of the bits without considering carry.
  • AND Operation: This identifies positions where a carry is generated, which is then left-shifted to the next higher bit.
  • By iteratively applying these operations, the process continues until there are no more carries to propagate.


    Algorithm and Code

    def get_sum(a, b):    while (a & b) != 0:        shift = a & b        carry = shift << 1        a = a ^ b        b = carry    return a ^ b

    Step-by-Step Explanation:

  • Loop Until No Carry Exists:

    • The loop continues as long as there is a carry (i.e., a & b is not zero).
  • Calculate Current Bit Sum (XOR):

    • a ^ b computes the sum of the current bits without carry.
  • Calculate Next Carry (AND then Shift Left):

    • shift = a & b identifies bits where both a and b have a 1 (indicating a carry to the next higher bit).
    • carry = shift << 1 propagates the carry to the next higher bit.
  • Update a and b for Next Iteration:

    • a = a ^ b holds the current bit sum.
    • b = carry prepares the carry for the next iteration.
  • Termination:

    • When a & b becomes zero, there are no more carries, and the loop exits.
  • Return Result:

    • The final result is a ^ b, which now includes all the carries.

  • Example Demos

    Example 1:

    • Input: a = 1, b = 2
    • Binary: a = 01, b = 10
    • Iteration 1: XOR = 11 (3), AND = 01 → Shift left → carry = 10
    • Next values: a = 11, b = 10
    • Iteration 2: XOR = 01, AND = 10 → Shift left → carry = 100
    • Next values: a = 01, b = 100
    • Loop terminates (a & b = 000).
    • Result: 3.

    Example 2:

    • Input: a = -2, b = 3
    • Binary (assuming infinite bits for -2): ...1110 (a), 0000...0011 (b)
    • Iterations simulate correct handling of carry and signs, resulting in sum 1.

    Considerations and Limitations

    • Negative Numbers: The algorithm works for negative numbers in Python due to its arbitrary-precision integers.
    • Time Complexity: The algorithm processes each bit individually, leading to O(log n) time complexity.
    • Overflow: For languages with fixed-size integers, overflow may cause issues, but Python handles this seamlessly.

    Conclusion

    This method elegantly demonstrates how bitwise operations can be used to perform addition without using the '+' operator. By using XOR to sum bits and AND followed by a left shift to handle carries, the algorithm efficiently computes the sum of two integers.

    转载地址:http://qxhiz.baihongyu.com/

    你可能感兴趣的文章
    mysql中null和空字符串的区别与问题!
    查看>>
    MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
    查看>>
    MYSQL中TINYINT的取值范围
    查看>>
    MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
    查看>>
    Mysql中varchar类型数字排序不对踩坑记录
    查看>>
    MySQL中一条SQL语句到底是如何执行的呢?
    查看>>
    MySQL中你必须知道的10件事,1.5万字!
    查看>>
    MySQL中使用IN()查询到底走不走索引?
    查看>>
    Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
    查看>>
    MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
    查看>>
    mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
    查看>>
    mysql中出现Unit mysql.service could not be found 的解决方法
    查看>>
    mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
    查看>>
    Mysql中各类锁的机制图文详细解析(全)
    查看>>
    MySQL中地理位置数据扩展geometry的使用心得
    查看>>
    Mysql中存储引擎简介、修改、查询、选择
    查看>>
    Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
    查看>>
    mysql中实现rownum,对结果进行排序
    查看>>
    mysql中对于数据库的基本操作
    查看>>
    Mysql中常用函数的使用示例
    查看>>