一日一コード まだまだ続く九回目
Joel on Software の面接で出される問題を解いてみるこのシリーズ。
今日はビットカウンタ。今までで一番簡単な気がする。
ルックアップテーブル C#版
class BitCount
{
static private byte[] LookUpTable = null;
static public int bitCount( byte d) //立っているビットを返す。
{
if( LookUpTable != null ) return LookUpTable[d]; //テーブルがあればそれを返す。
//テーブルを作成する。初期化
LookUpTable = new byte[256];
for( int i=0; i < 256; i++)
{
int cnt=0; d = (byte)i;
while( d != 0 ) //右にずらしていき、ゼロになったら抜ける。
{
if( (d & 0x01) == 0x01 ) cnt++; //下位1ビットが立っていたらカウントする。
d = (byte)(d >> 1);
}
LookUpTable[i] = (byte)cnt;
}
return LookUpTable[d];
}
static public int Main()
{
Console.WriteLine( bitCount( (byte)0) );
Console.WriteLine( bitCount( (byte)63) );
Console.WriteLine( bitCount( (byte)255));
return 0;
}
}