【发布时间】:2013-01-11 09:53:24
【问题描述】:
下面的神奇公式给出了一个数字中设置的位数(汉明权重)。
/*Code to Calculate count of set bits in a number*/
int c;
int v = 7;
v = v - ((v >> 1) & 0x55555555); // reuse input as temporary
v = (v & 0x33333333) + ((v >> 2) & 0x33333333); // temp
c = ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24; // count
printf(" Number of Bits is %d",c);
/*-----------------------------------*/
来自: http://graphics.stanford.edu/~seander/bithacks.html
谁能解释一下这背后的原理?
【问题讨论】:
-
天哪,除了炫耀外,没有理由记住这种奥秘(任何称职的人都应该知道来源)。
-
当然,如果你在采访中给出这样的答案,那么下一个问题就是“解释”。所以没有必要记住,坦率地说,无论如何我都不希望在采访中看到这一点。
-
向我们展示您是如何逐步完成示例的,一次一行,我们将帮助您找出错误(在问题的附录中请;不要在此发表评论)。
-
有人觉得 64 位标签对这个问题有点讽刺吗?
-
我建议您编写自己的 c 例程来查找设置的位数。它可以通过一些简单的转变和循环来完成。如果你能从头开始做到这一点,那比记住上面提到的东西要好得多,正如其他人所暗示的那样。
标签: c++ c bitmap bit-manipulation bit