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

posted @ 2025-08-21 17:46  风冷无霜  阅读(5)  评论(0)    收藏  举报