Как прочитать бит "char abc [10]" побитно и проверить, какой бит установлен? - PullRequest
0 голосов
/ 11 февраля 2011

пример:

в abc [2] мы находим 3-й бит, как установлено, тогда фактическое число битов будет 8 * 2 + 3, то есть установлен 19-й бит !!! вот так.

Ответы [ 3 ]

1 голос
/ 11 февраля 2011

Вы можете сделать простую проверку битов:

abc[i] & (1 << n)

это будет 0, если бит не установлен, и (1 << n), если он установлен

0 голосов
/ 11 февраля 2011

При использовании GCC вы можете закрепить свой битовый поиск, используя

  • __ builtin_ctzl (слово) , чтобы найти первый бит (младший порядок), установленный в uint32_t
  • (((sizeof (word) * 8) - 1) - __ builtin_clzl (word)) для определения последнего бита (старшего), установленного в uint32_t

Если выЕсли вы не желаете использовать какое-либо расширение, ориентированное на GCC, и не хотите анализировать ваш массив как uint32_t, вы все равно можете использовать функцию ffs () , чтобы найти первый бит (младший порядок), установленный вкаждый индекс массива, см. справочную страницу ffs () .

0 голосов
/ 11 февраля 2011

Это помогает?

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;
    }
}
...