码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-10-04 17:00:46      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:dal   pre   click   db2   turn   hid   img   return   one   

以前一直在用很普通的方式求二进制中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的个数

标签:dal   pre   click   db2   turn   hid   img   return   one   

原文地址:https://www.cnblogs.com/xwx2354672579/p/11622301.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!