有效的代码来计算二进制数末尾的尾随0的数量

时间:2020-10-19 11:36:25

标签: python string list

我正在研究一种用于查找二进制数中的尾随零的数目的方法,并遇到了C(link)的解决方案。我正在寻找Python中的解决方案!

Binary Input -> 1000
Output: 3

Binary Input -> 101101001100
Output: 2

Binary Input -> 1010001010000
Output: 4

Binary Input -> 100000001
Output: 0

有没有一种有效的方法,而无需将二进制数字作为字符串进行迭代或使用字符串方法进行过滤?基本上,我可能有很多非常大的二进制数,因此我试图找到一种比简单地将其作为字符串迭代更有效的方法。


编辑:

一些随机的SO用户不相信我已经在写一个简单的字符串匹配代码方面付出了很多努力,而我什至没有寻找解决方案,这是我的尝试-

def trailingzeros(l):
    count = 0
    a = [i for i in str(l)]
    for i in reversed(a):
        if i=='0':
            count+=1
        else:
            break
    return count

注意:我不想要这个。我正在寻找一种利用输入的二进制性质的解决方案。

2 个答案:

答案 0 :(得分:3)

n = 0b1010001010000

count = 0
while n:
    if (n&1):
        break
    n >>= 1
    count += 1

print(count)

打印:

4

答案 1 :(得分:1)

您可以使用python位运算符:

def findTrailing0(num):
    count = 0
    lastBit = 0
    while num != 0:
        lastBit = num & 0x1
        if lastBit != 0:
            break
        count += 1
        num >>= 1
    return count