変数にゼロビットがいくつあるかをどうやって数えることができますか? thist BITCOUNT(x,c) のようなマクロを使用する必要があります。ここで、x は変数、c は x のゼロ ビットのカウントです。
例: X = 00101001 および C = 5
簡単な解決策:
#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; \
}
参考までに、gcc にはそれを行うビルトインがあります。
__builtin_popcount()
( https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html )
アーキテクチャによっては、パフォーマンスが大幅に向上する可能性があると思います。