2012-03-01 57 views
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; 
} 

但我在理解這個方面有很多問題。我無法找到正確解釋 的鏈接。任何人都可以幫助我理解這段代碼, 或提供一個更有用的鏈接?

+1

可能重複[如何計算整數中的零位數?](http://stackoverflow.com/questions/4244274/how-do-i-count-the-number-of-zero -bits-in-an-integer) – 2012-03-01 18:02:14

+2

您應該記下原始代碼中使用的常量的二進制表示形式,並查看它在紙上運行時的功能。你確實知道像'>>'這樣的操作符是吧? – 2012-03-01 18:02:46

+0

@MrLister右移操作符 – Invictus 2012-03-01 18:03:36

回答