无限循环,同时使用按位运算将两个整数相加?

矩阵先生

我正在尝试使用python代码解决问题,这需要我在不使用'+'或'-'运算符的情况下添加两个整数。我有以下代码,非常适合两个正数:

def getSum(self, a, b):

    while (a & b):
        x = a & b
        y = a ^ b
        a = x << 1
        b = y

    return a ^ b

如果输入是两个正整数或两个负整数,那么这段代码可以完美地工作,但是当一个数字为正数而另一个数字为负数时,此代码将失败。它进入无限循环。是否知道为什么会发生这种情况?

编辑:这是讨论此代码修补程序链接

x

Python 3具有任意精度的整数(“ bignums”)这意味着任何时候x都是负数,x << 1将使x负数具有两倍的幅度。零从右边移入只会将数字推得越来越大。

在二进制补码中,正数0的最高位为,负数1的最高位为。这意味着,当仅一个ab为负时,顶部的位ab将不同。因此,x将为正(1 & 0 = 0)和y将为负(1 ^ 0 = 1)。因此,新的a将为正(x<<1),新的b将为负(y)。

现在:1至少在数学上,任意精度的负整数实际上具有无限数量的前导位。所以a是一个越来越大的正数,由2每次迭代扩大。b保持越说越导致1加位,以便能够进行按位&^使用a因此,任何位a被开启线向上与所添加的一个1b,所以a & b始终是真实的,所以循环运行下去。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无限循环,同时使用按位运算将两个整数相加?

来自分类Dev

仅使用1将两个整数相加

来自分类Dev

将两个16位整数相加以在6502中产生16位答案?

来自分类Dev

使用8位寄存器(汇编)将两个16位数字相加

来自分类Dev

使用运算符重载将两个向量相加

来自分类Dev

将两个整数之间的值相加?

来自分类Dev

可以同时运行两个无限循环吗?

来自分类Dev

两个256位整数的按位异或

来自分类Dev

使用左移和按位或将两个无符号字节组合为单个整数值

来自分类Dev

使用左移和按位或将两个无符号字节组合为单个整数值

来自分类Dev

等效于两个按位运算

来自分类Dev

如何使用位操作在C中不使用+运算符就将两个数相加

来自分类Dev

如何使用按位运算将3个整数值编码为uint16_t?

来自分类Dev

使用指针将两个4向量与sse相加

来自分类Dev

使用2的补码将两个负数相加

来自分类Dev

使用按位运算最多三个整数?

来自分类Dev

为什么使用无限for循环将无符号整数相加会导致错误的结果?

来自分类Dev

为什么使用无限for循环将无符号整数相加会导致错误的结果?

来自分类Dev

将两个列表相加

来自分类Dev

将两个128位整数相乘

来自分类Dev

仅使用位运算将两个数字相乘

来自分类Dev

将两个整数之间的所有数字相加

来自分类Dev

C#:将两个大整数相加会得出错误的结果

来自分类Dev

将两个整数相加会给cobol带来不必要的结果

来自分类Dev

在 Haskell 中不使用 + 运算符将两个数字相加

来自分类Dev

如何在C中使两个同时运行的无限循环?

来自分类Dev

如何在C中使用位操作在不使用+运算符的情况下相加两个数字

来自分类Dev

将两个64位整数乘以128位然后>> >> 64位的最快方法?

来自分类Dev

在一个MySQLi查询中的列上执行两个按位运算?

Related 相关文章

  1. 1

    无限循环,同时使用按位运算将两个整数相加?

  2. 2

    仅使用1将两个整数相加

  3. 3

    将两个16位整数相加以在6502中产生16位答案?

  4. 4

    使用8位寄存器(汇编)将两个16位数字相加

  5. 5

    使用运算符重载将两个向量相加

  6. 6

    将两个整数之间的值相加?

  7. 7

    可以同时运行两个无限循环吗?

  8. 8

    两个256位整数的按位异或

  9. 9

    使用左移和按位或将两个无符号字节组合为单个整数值

  10. 10

    使用左移和按位或将两个无符号字节组合为单个整数值

  11. 11

    等效于两个按位运算

  12. 12

    如何使用位操作在C中不使用+运算符就将两个数相加

  13. 13

    如何使用按位运算将3个整数值编码为uint16_t?

  14. 14

    使用指针将两个4向量与sse相加

  15. 15

    使用2的补码将两个负数相加

  16. 16

    使用按位运算最多三个整数?

  17. 17

    为什么使用无限for循环将无符号整数相加会导致错误的结果?

  18. 18

    为什么使用无限for循环将无符号整数相加会导致错误的结果?

  19. 19

    将两个列表相加

  20. 20

    将两个128位整数相乘

  21. 21

    仅使用位运算将两个数字相乘

  22. 22

    将两个整数之间的所有数字相加

  23. 23

    C#:将两个大整数相加会得出错误的结果

  24. 24

    将两个整数相加会给cobol带来不必要的结果

  25. 25

    在 Haskell 中不使用 + 运算符将两个数字相加

  26. 26

    如何在C中使两个同时运行的无限循环?

  27. 27

    如何在C中使用位操作在不使用+运算符的情况下相加两个数字

  28. 28

    将两个64位整数乘以128位然后>> >> 64位的最快方法?

  29. 29

    在一个MySQLi查询中的列上执行两个按位运算?

热门标签

归档