繁体   English   中英

需要帮助了解代码以对设置为1的位进行计数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM