【问题标题】:How do I find the position of the least significant bit in which 2 numbers differ in python?如何找到python中两个数字不同的最低有效位的位置?
【发布时间】:2019-12-11 13:08:04
【问题描述】:

我有两个二进制数

01110

和

10010

很容易看出,它们不同的第一个位置是右数第三个。我如何在 python 中找到它?比方说,我会有类似sdb(a, b) 的东西,在这种情况下会返回 3。有没有比使用 leftshift 从右边循环遍历 2 个数字位更好的选择?

【问题讨论】:

    标签: python python-3.x bit-manipulation bit


    【解决方案1】:

    您可以XOR 这两个数字,当两个位相同时 XOR 将返回 0,当两个位不同时返回 1。因此01110 ^ 10010 的结果将是11100,然后我们可以使用 rindex 将其解析为字符串,以查找我们从右侧遇到的第一个1,因为这将是位不同的第一个位置。这将为我们提供左侧的索引。然后我们从 xor 字符串的长度中减去它,以从发生差异的右侧获取位计数。

    def sdb(a: int, b: int) -> int:
        try:
            xor_string = f'{a^b:b}'
            index = len(xor_string) - xor_string.rindex('1')
        except ValueError as ve:
            #if no bits are different return index 0
            index = 0
        return index
    
    num1 = int('01110',2)
    num2 = int('10010',2)
    print(sdb(num1, num2))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-19
      • 2019-08-24
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多