n
配列内で連続するビットが設定または設定解除されている位置を見つけたいです。
配列の例:
a[0] = 0x0fffffff
a[1] = 0x000000f0
a[2] = 0xffffff00
設定されていない最初の 8 ビットを見つけたい場合は、28 (配列の 28 番目のビット位置) を返す必要があります。
最初の 32 の未設定ビットを見つけたい場合は、40 (配列の 40 番目のビット位置) を返す必要があります。
ここで見つけたコードを拡張して、任意の大きな配列で動作するようにしようとしています。
int BitCount(unsigned int u)
{
unsigned int uCount;
uCount = u
- ((u >> 1) & 033333333333)
- ((u >> 2) & 011111111111);
return
((uCount + (uCount >> 3))
& 030707070707) % 63;
}