我是靠谱客的博主 危机时光,这篇文章主要介绍计算 1 的位数,现在分享给大家,希望可以做个参考。

计算 1 的位数

population function 。例如,数字 37 的二进制形式是 100101,所以它包含有三个设置成 1 的位。一个计算 32 位整数 中 1 的位数的简单c语言程序是:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
int count_ones(unsigned int x) {
int i, result = 0;
for (i=0; i<32; i++) {
result += x & 1;
x = x >> 1;
}
return result;
}

不幸的是,这个简单的算法在现代的架构上将需要数以百计的时钟周期才能完成,这是因为它造成了许多分支和循环,而分支的速度是很慢的。这可以使用 loop unrolling 和其它一些聪明的技巧进行改进,但是最简单快捷的解决方案是查找表:简单地构建一个 包含每个字节可能值包含的 1 的个数的256 个条目的表。然后使用这个表查找整数中每个字节包含的 1 的个数,并且将结果相加。没有分支、四次内存访问、几乎没有算术运算,这样与上面的算法相比就可以大幅度地提升速度。

最后

以上就是危机时光最近收集整理的关于计算 1 的位数的全部内容,更多相关计算内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部