例子:
在 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;
}
}