近乎O求二进制数中1的个数

Posted xwx2354672579

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了近乎O求二进制数中1的个数相关的知识,希望对你有一定的参考价值。

以前一直在用很普通的方式求二进制中1的个数

技术图片
1 int run(int n)
2     int cnt;
3     while(n>0)
4         n=n&(n-1);
5         cnt++;
6     
7  
普通版

啊我好菜啊

发现大佬都用一种奇奇怪怪的算法 O(1)就解决了这种问题

技术图片
int bsrun(int n)
    int tmp=n - ((n>>1) &033333333333)-((n>>2) &011111111111);
    return((tmp+(tmp>>3)) &030707070707) %63;
DALAO版

为什么?

我也不懂鸭。。。

以上是关于近乎O求二进制数中1的个数的主要内容,如果未能解决你的问题,请参考以下文章

求二进制数中1的个数——引发的问题

求二进制数中1的个数

位运算求二进制数中1的个数

求二进制数中1的个数

算法-求二进制数中1的个数

读书笔记一:求二进制数中1的个数