BITSTRING(3) | FreeBSD Library Functions Manual | 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 の中の、0 を起点として bit 番目のビットをクリアまたは設定します。
マクロ bit_nset() とマクロ bit_nclear() は、ビット列 name の中の start から stop までの (0 を起点として番号付けした) ビットをセットまたはクリアします。
マクロ bit_test() は、ビット列 name 内で、0 を起点として bit 番目のビットがセットされている場合、0 でない値と評価され、それ以外の場合は、0 と評価されます。
マクロ bit_ffs() は、 name が参照する nbits ビットの配列のなかで、セットされたビットが最初に現れる位置を 0 を起点として番号付けした値を、 value が参照する位置に格納します。どのビットも設定されていない場合、 value が参照する位置に-1 が設定されます。
マクロ bit_ffc() は、 name が参照する nbits ビットの配列のなかで、セットされていないビットが最初に現れる位置を、 0 を起点として番号付けした値を、 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 で登場しました。July 19, 1993 | FreeBSD |