2012-08-29 37 views

回答

5

bit-twiddling hacks頁面有許多選項。

當然,你可能會說,遍歷所有32位可能爲O(N),在每一次:)

爲了簡單,它是同樣的成本,我會考慮的查找表,per-字節的方法,或迭代,因爲有位設置很多次,我想作爲寫布賴恩Kernighan的整潔的想法:

public static int CountBits(uint value) 
{ 
    int count = 0; 
    while (value != 0) 
    { 
     count++; 
     value &= value - 1; 
    } 
    return count; 
} 

如果你不喜歡填充256條目查找表的想法,每查找一個nybble仍然會很快。請注意,有可能8個數組查找可能比32個簡單位操作慢。

當然,在進入特別深奧的方法之前,測試應用程序的真實性能是值得的...這對你來說真的是一個瓶頸嗎?

+0

這看起來更具可讀性,但我仍然想知道像這樣計數位的用法是什麼。如果我不得不猜測,我會說它可能用於密碼學。 – Alisson

相關問題