我想對在極大位向量(即100,000位)中設置的位進行計數。在C計數位中旋轉的位
我現在正在做的是使用指向char(即char * cPtr)的指針指向位數組的開始位置。然後我:
1. look at each element of the array (i.e. cPtr[x]),
2. convert it to an integer (i.e. (int) cPtr[x])
3. use a 256 element look-up table to see how many bits are set in the given byte (i.e. cPtr[x]).
它發生,我認爲如果我使用short int類型的指針來代替(即短整型*特徵碼),那麼我只需要一半的樣子起坐,但有65534元look-這個表格在內存使用上會有自己的成本。
我在想什麼是每次檢查的最佳位數。另外,如果這個數字不是某種預設類型的大小,我該如何走下我的位向量,並將指針設置爲位數組起始位置之後的任意位數的ANY。
我知道還有其他的方法來計數位,但現在我想確定我可以優化這種方法之前進行比較其他方法。
這可能是值得看看這個網站:http://graphics.stanford.edu/~seander/bithacks.html – caspase 2012-03-05 21:41:10
測試是唯一的方法來找出什麼給你的特定機器的性能。由於位移的開銷,幾乎可以肯定地發現8的倍數對你來說效率最高,並且由於緩存局部性,可能正好是8位。 – 2012-03-05 22:11:02