u_foreach_bit
#define u_foreach_bit(b, dword) \
for (uint32_t __dword = (dword), b; \
((b) = ffs(__dword) - 1, __dword); \
__dword &= ~(1 << (b)))
首先我真的想见了那些写奇奇怪怪宏的人 怒骂一顿, 可读性实在是太差了!也肯能是我的水平低
转入正题
这个宏的作用是取出dword中的每一个非0bit所在的bit位,
#include <stdio.h>
#include <stdint.h>
#include <strings.h> // ffs()
#define u_foreach_bit(b, dword) \
for (uint32_t __dword = (dword), b; \
((b) = ffs(__dword) - 1, __dword); \
__dword &= ~(1 << (b)))
int main(void)
{
uint32_t mask = 0b1010101; // 十进制 84 = 0x54
printf("Initial mask = 0x%x (%u)\n", mask, mask);
u_foreach_bit(bit, mask) {
printf("Loop: bit=%d, __dword=0x%x\n", bit, __dword);
}
return 0;
}
运行结果
Initial mask = 0x55 (85)
Loop: bit=0, __dword=0x55
Loop: bit=2, __dword=0x54
Loop: bit=4, __dword=0x50
Loop: bit=6, __dword=0x40

浙公网安备 33010602011771号