Fast bit count问题(即计算一个unsigned int的二进制表达中1的数目)
来源:互联网 发布:mac声音无法调节 编辑:程序博客网 时间:2024/05/16 18:29
最近在看《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下编译运行是可以的。
- Fast bit count问题(即计算一个unsigned int的二进制表达中1的数目)
- Fast bit count问题(即计算一个unsigned int的二进制表达中1的数目)
- Count the number of bits that are on in an unsigned integer(计算一个无符整数中1Bit的个数)-- (1)
- Java实例4 - 快速计算二进制数中1的个数(Fast Bit Counting)
- Java实例4 - 快速计算二进制数中1的个数(Fast Bit Counting)
- 计算unsigned int型数据二进制形式中1出现的次数
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
- 求出两个int(32位)整数m和n的二进制表达中,有多少bit位不同
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
- 编程实现: 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
- 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
- 编程实现: 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
- 预处理标识符(两个int整数m和n的二进制表达中,有多少个位(bit)不同)
- 如何实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
- Hibernate中的Open Session In View的资料(英语版)
- Android 中级应用 handler 之一 "那个年代还不知handler"
- vtk交互
- [Object-C语言随笔之一]Mac os 下搭建iOS开发环境
- SEH汇编
- Fast bit count问题(即计算一个unsigned int的二进制表达中1的数目)
- 关于WIN32 API
- 2011-06-24|中到大雨|往返于中南|附昨晚情形
- Andorid“emulator: ERROR: unknown virtual device
- 谁正在出卖我们的隐私?
- VS 安装 VS web 创作组件引起的失败
- 唱音频率图
- RCU 原理( kernel 2.6 )
- 领域专用语言(DSL)