0

例:

abc[2] で 3 番目のビットが設定されていることがわかります。実際のビット番号は 8*2+3 で、19 番目のビットが設定されています!!! そのように。

4

3 に答える 3

1

簡単なビット操作チェックを行うことができます:

abc[i] & (1 << n)

それは0、ビットが設定されていない(1 << n)場合と設定されている場合です

于 2011-02-11T06:21:49.147 に答える
0

GCC を使用する場合、次を使用してビットマップ ルックアップを固定できます。

  • __builtin_ctzl(word) は、uint32_t に設定された最初のビット (下位) を検索します
  • (((sizeof(word) * 8) - 1) - __builtin_clzl(word)) uint32_t に設定された最後のビット (高位) を見つける

GCC 中心の拡張機能を使用したくなく、配列を uint32_t として解析したくない場合でも、ffs()関数を使用して、各配列に設定された最初のビット (下位) を見つけることができます。インデックス、ffs()のマンページを参照してください。

于 2011-02-11T09:30:38.540 に答える
-1

これは役に立ちますか?

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;
    }
}
于 2011-02-11T06:33:48.927 に答える