博客
关于我
【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/

    你可能感兴趣的文章
    MSCRM调用外部JS文件
    查看>>
    MSCRM调用外部JS文件
    查看>>
    MSEdgeDriver (Chromium) 不适用于版本 >= 79.0.313 (Canary)
    查看>>
    MsEdgeTTS开源项目使用教程
    查看>>
    msf
    查看>>
    MSSQL数据库查询优化(一)
    查看>>
    MSSQL数据库迁移到Oracle(二)
    查看>>
    MSSQL日期格式转换函数(使用CONVERT)
    查看>>
    MSTP多生成树协议(第二课)
    查看>>
    MSTP是什么?有哪些专有名词?
    查看>>
    Mstsc 远程桌面链接 And 网络映射
    查看>>
    Myeclipse常用快捷键
    查看>>
    MyEclipse更改项目名web发布名字不改问题
    查看>>
    MyEclipse用(JDBC)连接SQL出现的问题~
    查看>>
    mt-datetime-picker type="date" 时间格式 bug
    查看>>
    myeclipse的新建severlet不见解决方法
    查看>>
    MyEclipse设置当前行背景颜色、选中单词前景色、背景色
    查看>>
    Mtab书签导航程序 LinkStore/getIcon SQL注入漏洞复现
    查看>>
    myeclipse配置springmvc教程
    查看>>
    MyEclipse配置SVN
    查看>>