博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Fast bit count问题(即计算一个unsigned int的二进制表达中1的数目)
阅读量:4205 次
发布时间:2019-05-26

本文共 1526 字,大约阅读时间需要 5 分钟。

最近在看《Programming Pearls》。里面的好些问题很有意思。做一点小小的总结吧。

这个问题是计算一个unsigned int型二进制数中一个的个数,google中看到了不少很巧妙的算法,在这里做一个简单总结。另外,很喜欢stackoverflow这个论坛,geek很多,打酱油的人很少,感觉国外的程序员遇到有趣的问题兴致更高。关于这个问题,帖子见http://stackoverflow.com/questions/109023/best-algorithm-to-count-the-number-of-set-bits-in-a-32-bit-integer。

 

直观的想法

最简单最直观的想法是检测每一位是不是1,如果是的话就计数器加1,最后肯定能得出结果来。虽然"too simple, sometimes naive",但是一般情况下是很好用的,需要的时候不用到处查,很快就能写出来。

下面的程序思路一样,也是每位检测:

进阶

 

下面的这种方法比较巧妙,已经比较难想到了。可以动手试试n-1的二进制表达就明白了。

高级

这里面的方法属于那种“此曲只应天上有”的类型,我都没有尝试去理解,用的时候查一下就好了。

最懒的方法

下面的程序只有一句话,调用系统库函数 __builtin_popcount,我在gcc下编译运行是可以的。

转载地址:http://etxli.baihongyu.com/

你可能感兴趣的文章
《MySQL必知必会》——笔记
查看>>
《Spring揭秘》——AOP(笔记)
查看>>
《TCP/IP详解卷3》——HTTP(笔记)
查看>>
JVM——main()方法的执行。
查看>>
观止——《从Decorator,Adapter模式看Java/IO库》
查看>>
《Erlang程序设计》——笔记
查看>>
Erlang开发环境Windows+Emacs+Distel配置
查看>>
Erlang的特点——小结
查看>>
Erlang的makefile——小例子
查看>>
蜗牛爬井——Erlang版本
查看>>
《Erlang程序设计》第8章习题解
查看>>
Erlang学习资料
查看>>
Erlang中的xml的转换
查看>>
一些Erlang的图形界面工具
查看>>
java-阻塞队列
查看>>
spring-cloud-eureka
查看>>
springcloud采坑-jason序列化中的Date对象
查看>>
JDK-SPI简介【一】
查看>>
spring cloud采坑列表
查看>>
mochiweb——初始化
查看>>