首页 > 其他 > 详细

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

时间:2019-10-04 16:02:27      阅读:174      评论:0      收藏:0      [点我收藏+]

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!