Макрос BITCOUNT в C

63
3

как я могу подсчитать, сколько нулевых бит в переменной? Я должен использовать макрос как thist BITCOUNT (x, c), где x - моя переменная, а c - количество нулевых бит в x

пример: X = 00101001 и C = 5

спросил(а) 2021-01-19T17:56:23+03:00 6 месяцев, 2 недели назад
1
Решение
64

Простое решение:

#include <limits.h>

#define BITCOUNT(x,c) \
{ \
int i; \
(c) = 0; \
for ( i = 0; i < CHAR_BIT * sizeof(x); i++ ) \
(c) += ( (x) & ( 1 << i ) ) == 0; \
}

ответил(а) 2021-01-19T17:56:23+03:00 6 месяцев, 2 недели назад
45

FYI, gcc имеет встроенную систему, которая делает это:

__builtin_popcount()

(https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html)

Я думаю, что в зависимости от вашей архитектуры это может привести к хорошему повышению производительности.

ответил(а) 2021-01-19T17:56:23+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема