【发布时间】:2014-02-03 14:21:01
【问题描述】:
我找到以下代码来计算给定整数的二进制表示中 1-bits 的数量。谁能解释它是如何工作的?以及如何为此类任务选择位掩码?谢谢。
int count_one(int x)
{
x = (x & (0x55555555)) + ((x >> 1) & (0x55555555));
x = (x & (0x33333333)) + ((x >> 2) & (0x33333333));
x = (x & (0x0f0f0f0f)) + ((x >> 4) & (0x0f0f0f0f));
x = (x & (0x00ff00ff)) + ((x >> 8) & (0x00ff00ff));
x = (x & (0x0000ffff)) + ((x >> 16) & (0x0000ffff));
return x;
}
【问题讨论】:
-
这是做作业的吗?
-
见graphics.stanford.edu/~seander/bithacks.html,搜索“Counting bits set, in parallel”。
-
@Femaref 不,不是。只是想弄清楚它是如何工作的。
-
非常相似的问题有一个很好的解释:) stackoverflow.com/a/10874449/1051677
标签: c++ c algorithm bit-manipulation counting