ビットを探す ffs と fls 関数2019年05月03日 13時53分47秒

IEEE Std 1003.1-2001 ("POSIX.1") からビット列を探す関数が入っていた。ffs は一番右側のビットを見付けて、その位置を返す。fls は一番左側のビットを見付けて、その位置を返す。
% cat bits.c 
#include <strings.h>
#include <stdio.h>

int main()
{
    int bits = 16 + 2;
    printf( "%d\n", bits );
    for( int i = 7; i >= 0; i-- )
        printf( "%c", ( bits & ( 1 << i ) ? '1' : '0' ) );
    printf( "\n" );
    printf( "ffs %d\n", ffs( bits ) );
    printf( "fls %d\n", fls( bits ) );
    return 0;
}
% cc bits.c 
% ./a.out 
18
00010010
ffs 2
fls 5
%

なお、long 型には l が一つ付いた、ffsl と flsl 関数があり、long long 型には l が二つ付いた ffsll と flsll 関数がある。