查找一个整数的最低的位为1的下标是常用见的算法。很多CPU都在硬件层面直接提供该指令,例如,i386的BSF指令。
但是,如果硬件没有提供该指令,又当如何。来看kernel中的算法:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
int
__ffs(
int
x)
{
int r = 0 ;
if ( ! x)
return 0 ;
if ( ! (x & 0xffff )) {
x >>= 16 ;
r += 16 ;
}
if ( ! (x & 0xff )) {
x >>= 8 ;
r += 8 ;
}
if ( ! (x & 0xf )) {
x >>= 4 ;
r += 4 ;
}
if ( ! (x & 3 )) {
x >>= 2 ;
r += 2 ;
}
if ( ! (x & 1 )) {
x >>= 1 ;
r += 1 ;
}
return r;
}
{
int r = 0 ;
if ( ! x)
return 0 ;
if ( ! (x & 0xffff )) {
x >>= 16 ;
r += 16 ;
}
if ( ! (x & 0xff )) {
x >>= 8 ;
r += 8 ;
}
if ( ! (x & 0xf )) {
x >>= 4 ;
r += 4 ;
}
if ( ! (x & 3 )) {
x >>= 2 ;
r += 2 ;
}
if ( ! (x & 1 )) {
x >>= 1 ;
r += 1 ;
}
return r;
}
分治思想的完美体现。。。