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

时间:2012-03-01 17:57:27

标签: c++ c

我遇到了a StackOverflow answer,它提供了以下代码,可以有效地计算32位1中设置为int的位数:

int NumberOfSetBits(int i)
{
    i = i - ((i >> 1) & 0x55555555);
    i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
    return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
}

但是我在理解这个问题时遇到了很多问题。我找不到它的链接 解释得当。任何人都可以帮助我理解这段代码, 或者提供一个可能更有用的链接?

1 个答案:

答案 0 :(得分:1)

在某种程度上间接地回答:亨利·沃伦(Henry Warren)的书“黑客喜悦”(Hacker's Delight)是一本很好的参考书。我强烈推荐它 - 它属于每个程序员的书架。 http://www.amazon.com/Hackers-Delight-Henry-S-Warren/dp/0201914654