例:
abc[2] で 3 番目のビットが設定されていることがわかります。実際のビット番号は 8*2+3 で、19 番目のビットが設定されています!!! そのように。
簡単なビット操作チェックを行うことができます:
abc[i] & (1 << n)
それは0
、ビットが設定されていない(1 << n)
場合と設定されている場合です
GCC を使用する場合、次を使用してビットマップ ルックアップを固定できます。
GCC 中心の拡張機能を使用したくなく、配列を uint32_t として解析したくない場合でも、ffs()関数を使用して、各配列に設定された最初のビット (下位) を見つけることができます。インデックス、ffs()のマンページを参照してください。
これは役に立ちますか?
int l = sizeof(abc);
int k = sizeof(*abc);
int i, j;
for (i = 0; i < l; ++i) {
char n = abc[i];
for (j = 0; j < k; ++j) {
if (n & 0x01)
printf("Bit number %d is set.\n", (l*k)-i);
n = n >> 1;
}
}