ビットカウント
BitBoard版ライフゲームを作っていて、8bitの立っているビットの数を数える関数を作ったら、中々速かったので晒し。いわゆるテーブル参照。
//0~15 int BitNumber[]={0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3}; int bitCount(unsigned int n){ //渡された8ビットをふたつに分け、配列から個数をとりだす。 int cnt=0; //n32>>4 :左。シフトして下四桁のみにする //n32&0x0F :右。ビットマスクして下四桁のみにする cnt=BitNumber[n&0x0F]+BitNumber[n>>4]; return cnt; }
引数はどうやらunsigned charよかunsigned intの方が速いようなので、8bitでなく32bitで渡しています。
32bitCPUだからなのかしら。
うーん、それにしても僕のプログラムは遅すぎる。プログラミングも遅い。まあいっか。