本文共 412 字,大约阅读时间需要 1 分钟。
kernel中有个宏ffs,是用于从一个数中找出第一个为1的位(由低到高),为了提高效率,用了汇编指令实现。
static inline int fls(int x){ int ret; if (__builtin_constant_p(x)) return constant_fls(x); asm("clz\t%0, %1" : "=r" (ret) : "r" (x)); ret = 32 - ret; return ret;}#define ffs(x) ({ unsigned long __t = (x); fls(__t & -__t); })
在其它应用中,由于不需要考虑效率问题,可以采用其他方式实现:
#define ffs(x) ({\ unsigned long i = 0;\ if(x == 0)\ i = 32;\ else {\ while((x & (1<
转载地址:http://fqbqi.baihongyu.com/