首页 > 代码库 > linux内核函数fls()

linux内核函数fls()

/** * fls - find last (most-significant) bit set * @x: the word to search * * This is defined the same way as ffs. * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32. */static __always_inline int fls(int x){    int r = 32;    if (!x)        return 0;    if (!(x & 0xffff0000u)) {        x <<= 16;        r -= 16;    }    if (!(x & 0xff000000u)) {        x <<= 8;        r -= 8;    }    if (!(x & 0xf0000000u)) {        x <<= 4;        r -= 4;    }    if (!(x & 0xc0000000u)) {        x <<= 2;        r -= 2;    }    if (!(x & 0x80000000u)) {        x <<= 1;        r -= 1;    }    return r;}

作用是:返回输入参数的最高有效bit位(从低位往左数最后的有效bit位)的序号,该序号与常规0起始序号不同,它是1起始的(当没有有效位时返回0)。

linux内核函数fls()