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

在python中,如何找到两个数字不同的最低有效位的位置?,python,python-3.x,bit-manipulation,bit,Python,Python 3.x,Bit Manipulation,Bit,我有两个二进制数 01110 及 很容易看出,它们不同的第一个位置是从右侧开始的第三个位置。我如何在python中找到它?比方说,我会得到类似于sdba的东西,b,在这种情况下会返回3。有没有比使用leftshift从右侧循环2个数字的位更好的选项?您可以对这两个数字进行异或运算,当两个位相同时,异或将返回0,当两个位不同时,异或将返回1。01110^10010的结果将是11100,然后我们可以使用rindex将其解析为一个字符串,以查找我们从右侧遇到的第一个1,因为这将是位不同的第一个位置。

我有两个二进制数

01110

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

您可以对这两个数字进行异或运算,当两个位相同时,异或将返回0,当两个位不同时,异或将返回1。01110^10010的结果将是11100,然后我们可以使用rindex将其解析为一个字符串,以查找我们从右侧遇到的第一个1,因为这将是位不同的第一个位置。这将为我们提供从左侧开始的索引。然后,我们从xor字符串的长度中减去该值,以从出现差异的右侧获得位计数

def sdba:int,b:int->int: 尝试: xor_string=f'{a^b:b}' index=lenxor\u string-xor\u string.rindex'1' 除ValueError为ve外: 如果没有不同的位,则返回索引0 索引=0 回报指数 num1=int'01110',2 num2=int'10010',2 printsdbnum1,num2 您可以对这两个数字进行异或运算,当两个位相同时,异或运算将返回0,当两个位不同时,异或运算将返回1。01110^10010的结果将是11100,然后我们可以使用rindex将其解析为一个字符串,以查找我们从右侧遇到的第一个1,因为这将是位不同的第一个位置。这将为我们提供从左侧开始的索引。然后,我们从xor字符串的长度中减去该值,以从出现差异的右侧获得位计数

def sdba:int,b:int->int: 尝试: xor_string=f'{a^b:b}' index=lenxor\u string-xor\u string.rindex'1' 除ValueError为ve外: 如果没有不同的位,则返回索引0 索引=0 回报指数 num1=int'01110',2 num2=int'10010',2 printsdbnum1,num2
10010