[英]Need help understanding code to count bits set to 1
我遇到了一个StackOverflow答案 ,该答案提供了以下代码来有效地计算32位int
中设置为1
的位数:
int NumberOfSetBits(int i)
{
i = i - ((i >> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
}
但是我在理解这一点上有很多问题。 我找不到正确解释的链接。 任何人都可以在这里帮助我理解这段代码,或者提供一个可能更有用的链接吗?
有点间接的回答:亨利·沃伦(Henry Warren)所著的《哈克的喜悦》(Hacker's Delight)一书很好地提到了像这样的程序(以及其他数百种程序)如何工作。 我强烈推荐它-它属于每个程序员的书架。 http://www.amazon.com/Hackers-Delight-Henry-S-Warren/dp/0201914654
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.