美文网首页
位运算应用-统计一个数二进制表示中1的个数

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

作者: 北山学者 | 来源:发表于2018-07-17 14:32 被阅读0次

给出如下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的个数)

相关文章

  • 剑指offer(Java版)day03:二进制中1的个数|数值的

    1二进制中1的个数 【题目】输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 【考察点】位运算 【...

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

    给出如下PHP代码 原理解释: 一个等于2的n次方的数,二进制表1000......,即除了第n位(下标从0开始)...

  • 15_二进制中1的个数

    要求:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:把1的二进制数每次往左移一位, 位运算...

  • JZ-011-二进制中 1 的个数

    二进制中 1 的个数 题目描述 输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。题目链接: ...

  • 1.3 题解:计算无符号二进制数中1的个数

    Chapter1: 位运算的奇技淫巧 3. 题解:计算无符号二进制数中1的个数 题目 计算无符号整数的二进制表示中...

  • 面试题10:二进制中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 代码实现 主要思路 1、首先因为位运算...

  • 【剑指15】二进制中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 分析 1.位运算 2.Integer自...

  • 位运算和二叉树

    剑指offer所有的题目总结 牛客 java中的二进制与按位运算 1. 输入一个整数,输出该数二进制表示中1的个数...

  • 面试题15:二进制中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 知识点 进制转换,位运算 Qiang的...

  • 11.位运算

    原题链接 给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。 lowbit运算:原码与补码相与 ...

网友评论

      本文标题:位运算应用-统计一个数二进制表示中1的个数

      本文链接:https://www.haomeiwen.com/subject/wuowpftx.html