Day4: 位1的个数

leetcode地址:https://leetcode-cn.com/problems/number-of-1-bits/

Day4: 位1的个数

一. 问题背景:

编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。

二. 解决思路:

1. 循环移位法

        通过右移操作,每右移一位就通过与1按位与来判断最后一位是否为1。

2. Bit1稀疏法(Sparse Ones)

        ①源操作数减1(当一个数被减1时,他最右边的那个值为1的Bit将变为0,同时其右边的所有的Bit都会变成1)。

        ②源操作数与源操作数减1按位相与并将结果赋值给源操作数,计数加1。

        ③循环上述操作,直至源操作数为0。

这个算法循环的次数是bit位为1的个数。也就说有几个Bit为1,循环几次。对Bit为1比较稀疏的数来说,性能很好。如:0x1000 0000, 循环一次就可以。

三. 算法实现:

#1 循环移位法
def count_of_1bits(value):
    n = 0
    while value:
        if(value&1):
            n += 1
        value = value>>1
    return n

n = count_of_1bits(0b11001100)
print(n)

#2 Bit1稀疏法
def count_of_1bits(value):
    n = 0
    while value:
        value &= value - 1
        n += 1
    return n

n = count_of_1bits(0b11001100)
print(n)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值