在python中,如何找到两个数字不同的最低有效位的位置?

2024-06-03 02:27:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个二进制数

01110

以及

10010

很容易看出,他们区别的第一个位置是右边的第三个位置。如何在python中找到它?比方说,我将得到sdb(a, b)这样的值,在本例中返回3。有没有比使用leftshift从右循环2个数字的位更好的选择


Tags: 二进制数字区别本例sdbleftshift
1条回答
网友
1楼 · 发布于 2024-06-03 02:27:49

您可以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))

相关问题 更多 >