● fixed X - 関数リファレンス

ビットの検索

    int __stdcall   fixed_bsf(PFIXEDVAL pval ,int width );

    int __stdcall   fixed_bsr(PFIXEDVAL pval ,int width );

引数

引数名意味
pval対象の数値が格納されている FIXEDVAL領域の先頭アドレス
widthpval の指す FIXEDVAL値の数値幅(バイト単位)

戻り値

LSB をゼロとするビットインデックス(ビットの位置)を返します。
ビットが見つからなかった場合は -1 を返します。

説明

pval の指す領域の中から 1 のビットを検索し、その位置を返します。1 のビットが複数ある場合は、最初に発見したビットの位置を返します。
関数fixed_bsf は LSB から MSB に向かって検索し、関数fixed_bsr は MSB から LSB に向かって検索します。

引数 pval の指す領域は、width が示す数値幅以上のサイズを持っている必要があり、width は 4 の倍数である必要があります。


例.

/*
  unsigned FIXEDVAL値が 2^n であるかをチェックする

  戻り値:
          2^n の場合は n を返す
          それ以外は -1 を返す
*/
int     check_binary(PFIXEDVAL pval,int width)
{
    int         n;

    return ((n = fixed_bsr(pval,width)) >= 0 &&
        (fixed_bsf(pval,width) == n))? n : -1;
}