需要帮助理解将位数设置为1的代码

Need help understanding code to count bits set to 1

本文关键字:设置 代码 帮助 助理      更新时间:2023-10-16

我遇到了一个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的《黑客的喜悦》一书很好地参考了像这样(以及其他数百种)的小程序是如何工作的。我强烈推荐它——它属于每个程序员的书架。http://www.amazon.com/Hackers-Delight-Henry-S-Warren/dp/0201914654