2011-10-10 89 views
0

我使用下面的函數來計算整數中的設置位,它適用於正數,但不適用於負數。誰能解釋爲什麼?爲什麼此功能不適用於負數?

int CountSetBits(int number) 
{ 
    int count = 0; 
    while (number > 0) 
    { 
     count += (number & 0x01); 
     number >>= 1; 
    } 

    return count; 
} 
+3

define'does not wo RK」。你期望什麼,你會得到什麼?也許你需要查找'符號擴展'。 – bmargulies

回答

6
while (number > 0) 

會立即結束(因爲從發病數< 0)

你可以迫使它當作無符號數:

unsigned int new_number = number; 

然後它應該工作new_number(這是因爲符號位是如何實現的)

+0

輕微的挑剔,這是假設2的補充,這實際上並沒有標準的要求,但所有現代機器使用它。然而,該標準確保如果使用2的補碼,那麼轉換是按位精確的。 –

相關問題