2016年7月29日金曜日

population count

32bitのpopulation count
1のビットを数え上げる
コンパイラ組み込み関数を使わない場合,
inline u32 population_count(u32 v)
{
    v = (v & 0x55555555U) + ((v>>1) & 0x55555555U);
    v = (v & 0x33333333U) + ((v>>2) & 0x33333333U);
    v = (v & 0x0F0F0F0FU) + ((v>>4) & 0x0F0F0F0FU);
    v = (v & 0x00FF00FFU) + ((v>>8) & 0x00FF00FFU);
    return (v & 0x0000FFFFU) + ((v>>16) & 0x0000FFFFU);
}
gccの組み込み関数,
int __builtin_popcount(unsigned int x)
VCの組み込み関数,
unsigned int __popcnt(unsigned int value)

0 件のコメント:

コメントを投稿