博客
关于我
【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一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
    查看>>
    MySQL万字总结!超详细!
    查看>>
    Mysql下载以及安装(新手入门,超详细)
    查看>>
    MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
    查看>>
    MySQL不同字符集及排序规则详解:业务场景下的最佳选
    查看>>
    Mysql不同官方版本对比
    查看>>
    MySQL与Informix数据库中的同义表创建:深入解析与比较
    查看>>
    mysql与mem_细说 MySQL 之 MEM_ROOT
    查看>>
    MySQL与Oracle的数据迁移注意事项,另附转换工具链接
    查看>>
    mysql丢失更新问题
    查看>>
    MySQL两千万数据优化&迁移
    查看>>
    MySql中 delimiter 详解
    查看>>
    MYSQL中 find_in_set() 函数用法详解
    查看>>
    MySQL中auto_increment有什么作用?(IT枫斗者)
    查看>>
    MySQL中B+Tree索引原理
    查看>>
    mysql中cast() 和convert()的用法讲解
    查看>>
    mysql中datetime与timestamp类型有什么区别
    查看>>
    MySQL中DQL语言的执行顺序
    查看>>
    mysql中floor函数的作用是什么?
    查看>>
    MySQL中group by 与 order by 一起使用排序问题
    查看>>