BITSTRING(3)

名称
bit_alloc, bit_clear, bit_decl, bit_ffs, bit_nclear, bit_nset, bit_set, bitstr_size, bit_test - ビット列操作マクロ

書式
#include <bitstring.h> bitstr_t * bit_alloc(int nbits) void bit_decl(bitstr_t *name, int nbits) void bit_clear(bitstr_t *name, int bit) void bit_ffc(bitstr_t *name, int nbits, int *value) void bit_ffs(bitstr_t *name, int nbits, int *value) void bit_nclear(bitstr_t *name, int start, int stop) void bit_nset(bitstr_t *name, int start, int stop) void bit_set(bitstr_t *name, int bit) int bitstr_size(int nbits) int bit_test(bitstr_t *name, int bit)

解説
これらのマクロはビット列を操作します。

マクロ bit_alloc() は、 nbits 個のビットを格納するのに十分な空間を指す型 “bitstr_t *” のポインタを返します。または、空間が利用できない場合は NULL を返します。

マクロ bit_decl() は、 nbits 個のビットを格納するのに十分な空間をスタックに割り付けます。

マクロ bitstr_size() は、 nbits 個のビットを格納するのに必要な、型 bitstr_t の要素の数を返します。これはビット列をコピーするのに便利です。

マクロ bit_clear() とマクロ bit_set() は、ビット列 name の中の、ゼロを起点として bit 番目のビットをクリアまたは設定します。

マクロ bit_nset() とマクロ bit_nclear() は、ビット列 name の中の start から stop までの (ゼロを起点として番号付けした) ビットをセットまたは クリアします。

マクロ bit_test() は、ビット列 name 内で、ゼロを起点として bit 番目のビットがセットされている場合、評価結果はゼロでない値になり、 それ以外の場合はゼロと評価されます。

マクロ bit_ffs() は、 name が参照する nbits ビットの配列のなかで、セットされたビットが最初に現れる位置を ゼロを起点として番号付けした値を、 value が参照する位置に格納します。どのビットも設定されていない場合、 value が参照する位置に、-1 が設定されます。

マクロ bit_ffc() は、 name が参照する nbits ビットの配列のなかで、セットされていないビットが最初に現れる位置を、 ゼロを起点として番号付けした値を、 value が参照する位置に格納します。どのビットも設定されている場合、 value が参照する位置に、-1 が設定されます。

これらのマクロの引数は、 1 回だけ評価され、安全な副作用がある 可能性があります。

例

    #include <limits.h>
    #include <bitstring.h>
    ...
    #define LPR_BUSY_BIT		0
    #define LPR_FORMAT_BIT		1
    #define LPR_DOWNLOAD_BIT	2
    ...
    #define LPR_AVAILABLE_BIT	9
    #define LPR_MAX_BITS		10
    make_lpr_available()
    {
    	bitstr_t bit_decl(bitlist, LPR_MAX_BITS);
    	...
    	bit_nclear(bitlist, 0, LPR_MAX_BITS - 1);
    	...
    	if (!bit_test(bitlist, LPR_BUSY_BIT)) {
    		bit_clear(bitlist, LPR_FORMAT_BIT);
    		bit_clear(bitlist, LPR_DOWNLOAD_BIT);
    		bit_set(bitlist, LPR_AVAILABLE_BIT);
    	}
    }

関連項目
malloc(3)

歴史
bitstring 関数は最初に 4.4BSD で現れました。