2024-06-03 02:27:49 发布
网友
我有两个二进制数
01110
以及
10010
很容易看出,他们区别的第一个位置是右边的第三个位置。如何在python中找到它?比方说,我将得到sdb(a, b)这样的值,在本例中返回3。有没有比使用leftshift从右循环2个数字的位更好的选择
sdb(a, b)
您可以XOR当两个位相同时,这两个数字和XOR将返回0,当两个位不同时,返回1。因此01110 ^ 10010的结果将是11100,然后我们可以使用rindex将其解析为一个字符串,以查找我们从右侧遇到的第一个1,因为这将是位不同的第一个位置。这将给我们从左边开始的索引。然后我们从xor字符串的长度中减去这个值,得到右边出现差异的位计数
XOR
01110 ^ 10010
11100
1
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))
您可以
XOR
当两个位相同时,这两个数字和XOR将返回0,当两个位不同时,返回1。因此01110 ^ 10010
的结果将是11100
,然后我们可以使用rindex将其解析为一个字符串,以查找我们从右侧遇到的第一个1
,因为这将是位不同的第一个位置。这将给我们从左边开始的索引。然后我们从xor字符串的长度中减去这个值,得到右边出现差异的位计数相关问题 更多 >
编程相关推荐