非常に大きなビットベクトル(つまり、100,000ビット)に設定されているビットをカウントしたいと思います。
私が現在行っているのは、charへのポインター(つまり、char * cPtr)を使用して、ビット配列の先頭を指すことです。そして私は・・・それから私は:
1. look at each element of the array (i.e. cPtr[x]),
2. convert it to an integer (i.e. (int) cPtr[x])
3. use a 256 element look-up table to see how many bits are set in the given byte (i.e. cPtr[x]).
代わりにshortintポインター(つまり、short int * sPtr)を使用すると、ルックアップの数は半分になりますが、65534要素のルックアップテーブルを使用すると、独自のコストが発生します。メモリ使用量。
毎回調べるのに最適なビット数はいくつなのか気になります。また、その数値がプリセットタイプのサイズではない場合、ビットベクトルをたどって、ビット配列の開始位置を超えた任意のビット数にポインタを設定するにはどうすればよいですか。
ビットをカウントする方法は他にもあることは知っていますが、今のところ、他の方法と比較する前に、この方法を最適化できることを確認したいと思います。