ビット数を数える

ここのバージョン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