0
我碰到a StackOverflow answer,讓下面的代碼來有效地計算了在32位int
設置爲1
的位數來了位:需要幫助理解碼數設置爲1
int NumberOfSetBits(int i)
{
i = i - ((i >> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
}
但我在理解這個方面有很多問題。我無法找到正確解釋 的鏈接。任何人都可以幫助我理解這段代碼, 或提供一個更有用的鏈接?
可能重複[如何計算整數中的零位數?](http://stackoverflow.com/questions/4244274/how-do-i-count-the-number-of-zero -bits-in-an-integer) – 2012-03-01 18:02:14
您應該記下原始代碼中使用的常量的二進制表示形式,並查看它在紙上運行時的功能。你確實知道像'>>'這樣的操作符是吧? – 2012-03-01 18:02:46
@MrLister右移操作符 – Invictus 2012-03-01 18:03:36