ビット数を数える
ここのバージョン5を参考に
http://www.nminoru.jp/~nminoru/programming/bitcount.html
import Bits bitCount1 :: Int -> Int bitCount1 b = (foldl f) b [(1,0x55555555),(2,0x33333333),(4,0x0f0f0f0f), (8,0x00ff00ff),(16,0x0000ffff)] where f :: Int -> (Int,Int) -> Int f b (n,a) = (b .&. a) + ((shiftR b n).&. a)
実行結果
*Main> bitCount1 1 1 *Main> bitCount1 2 1 *Main> bitCount1 3 2 *Main> bitCount1 4 1 *Main> bitCount1 5 2 *Main> bitCount1 6 2 *Main> bitCount1 7 3