位运算应用-统计一个数二进制表示中1的个数

给出如下PHP代码

function f($data){

    $cnt = 0;
    while($data){
        $data &= $data-1;
        $cnt++;
     }

  return $cnt;
}

原理解释:

一个等于2的n次方的数,二进制表1000......,即除了第n位(下标从0开始)为1,其余位皆为0,这个数减1后则为0111......,即除了第n位为0外,其余位皆为1,这样data &(data-1)则等于0,一次就消去了一个1。

而一般的数如6 = 0110,某位有1则为2的某次方,即a = 2的2次方 + 2的1次方。则用 data &(data-1)这个去计算,数从右至左一次消去一个1,累计可以得出1的个数。

举个例子

十进制数:11257
其二进制表示为:10101111111001
调用函数f计算1的总数目:10

参考

1、位运算--求一个 数二进制中1的个数
2、位运算--统计一个数的二进制序列中1的个数
3、剑指offer—算法之位运算(二进制中1的个数)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 14,018评论 6 13
  • 本来定好每个星期写一遍算法的博客的,可是因为最近赶项目,博客停止更新一段时间了,现在抽空继续更新。本来心情挺好的,...
    GitHubClub阅读 6,036评论 0 5
  • 2017年11月23日上午,太康县教体局领导张西典股长,高朗乡中心校校长刘德峰及李亚州主任来我校检查教师上...
    张文丽阅读 3,971评论 0 0
  • 本文的作者是一位金融界的奇人---卜金道人。 卜金道人:卜金汇国际金融研究所基于时间维度的数据研发带头人。师承中国...
    Kaiser1818阅读 5,291评论 2 50

友情链接更多精彩内容