[编程之美2.1]求二进制数中1的个数

题目:对于一个字节(8bit)的无符号变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能高。

思路一:从十进制转化为二进制的方法中获得启发,可以余2然后判断是否为一,是则加一,再将该数除2继续之前的判断操作。
思路二:将余2和除2操作用位操作&和>>来表示,使得效率更加快
思路三:判断一个数是否为2的幂次可以用v&(v - 1)来求解,比如v = 1000000,则v-1 = 0111111,此时v与v-1所有位上的数都不相同,显然可以用v&(v-1)是否为0来判断v是否为                 2的幂次,根据此思路,可以算出1的位数,复杂度是该数中1的个数
思路四:用空间换时间的策略,8字节的变量,总共也就128个数,将这128个结果列成一个数组直接打出来即可,然后可以根据索引求值

扩展问题:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值