2013-02-12 54 views
-2

我有以下函數,女巫得到一個整數(十進制數),並將其轉換爲二進制數後返回該整數的個數(例如,如果我們傳遞6,函數將返回2,因爲十進制中的6等於110二進制)。 這很好,但不幸的是我不明白它是如何工作的。代碼是:複雜的c代碼,我需要任何解釋它是如何工作的?

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

有沒有人可以向我解釋它是如何工作的?

回答