如何求二进制数中0的个数

如何求二进制数中0的个数

腾讯笔试

题目描述:

给定一个整数,输出这个整数的二进制表示中 l 的个数。例如 : 给定整数 7,其二进制表示为 111, 因此输出结果为 3。

方法一: 移位法

可以采用位操作来完成 。具体思路如下:首先,判断这个数的最后 一位是否为1,如果 为 1,那么计数器如门,然后,通过右移丢弃掉最后一位,循环执行该操作直到这个数等于 0 为止。在判断二进制表示的最后一位是否为1时,可以采用与运算来达到这个目的。具体实 现代码如下 :

def countone(n):
    count=0
    while n>0:
        if (n&1)==1:
            count+=1
        n>>=1
    return count
print(countone(7))

方法二:与操作法

给定一个数 n,每进行一次 n&(n-1)计算,其结果中都会少了一位 l,而且是最后一位。例如, n=6,其对应的 二进制表示为 110, n一1=5,对应的 二进制表示为 101, n&(n 1)运算后 的二进制表示为 100,其效果就是去掉了 110 中最后一位 1。可以通过不断地用 n&(n 1)操作 去掉 n 中最后一位 1 的方法求出 n 中 l 的个数,实现代码如下:

def countone(n):
    count=0
    while n>0:
        if n!=0:
            n=n&(n-1)
        count+=1
    return count
countone(7)
    原文作者:CAIC00513
    原文地址: https://blog.csdn.net/weixin_42813521/article/details/107781524
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞