ビットセットはブール値の配列ですが、各ブール値は別個のバイトに格納されるのではなく、ビットセットは次のようにスペースを最適化します。 各ブール値は 1 ビットのスペースのみを使用します 、 それで ビットセットが占めるスペースは、ブールの配列またはブールのベクトルのスペースより小さいです 。
ビットセットの制限は次のとおりです。 サイズはコンパイル時にわかっている必要があります。つまり、ビットセットのサイズは固定されています。
std::ビットセット 内部で定義されているビットセットのクラス テンプレートです。 ヘッダーファイル したがって、プログラムで bitset を使用する前にヘッダー ファイルをインクルードする必要があります。
構文:
bitset variable_name(initialization);>
ビットセットは 3 つの方法で初期化できます。
1. 未初期化: すべてのビットはゼロに設定されます。
bitset variable_name;>
2. 10 進整数による初期化: ビットセットは、指定された 10 進数を 2 進数形式で表します。
bitset variable_name(DECIMAL_NUMBER);>
3. バイナリ文字列による初期化: Bitset は指定されたバイナリ文字列を表します。
bitset variable_name(string('BINARY_STRING')); bitset variable_name('BINARY_STRING');>例:
C++ // C++ program to demonstrate the bitset #include #include using namespace std; int main() { // declaring an uninitialized bitset object bitset<8>未初期化ビットセット; // 10 進数のビットセットによる初期化<8>10 進数ビットセット(15); // バイナリ文字列ビットセットによる初期化<8>stringBitset(string('1111')); コート<< 'Uninitialized bitset: ' << uninitializedBitset << endl; cout << 'Initialized with decimal: ' << decimalBitset << endl; cout << 'Initialized with string: ' << stringBitset << endl; return 0; }> 出力
Uninitialized bitset: 00000000 Initialized with decimal: 00001111 Initialized with string: 00001111>
std::bitset メンバー関数
std::bitset クラスには、ビットセット オブジェクトを操作するための便利なメンバー関数がいくつか含まれています。以下は std::bitset のいくつかのメンバー関数のリストです。
関数名 | 機能の説明 |
|---|---|
セット() | をセットする ビット値 指定されたインデックスで 1に 。 |
リセット() | をセットする ビット値 指定されたインデックスで 0まで 。 |
フリップ() | ビット値を反転します 指定されたインデックスで。 |
カウント() | カウント の数 ビットを設定する 。 |
テスト() | を返します ブール値 指定されたインデックスで 。 |
どれでも() | かどうかを確認します どれでも ビットは セット 。 |
なし() | かどうかを確認します なし ビットは セット。 |
全て() | どうかを確認してください 全て ビットは セット。 |
サイズ() | を返します ビットセットのサイズ。 |
to_string() | 改宗者 ビットセットを std::string に設定します。 |
to_follow() | 改宗者 ビットセットを unsigned long に設定します。 |
to_ullong() | 改宗者 ビットセットを unsigned long long に設定します。 |
例:
C++ // C++ program to demonstrate the // use of std::bitset member // functions #include #include using namespace std; int main() { // declaring index variable int index = 0; // declaring few bitset objects bitset<4>allSet('1111')、allUnset; コート<< 'any() value: ' << boolalpha << allSet.any() << endl; cout << 'all() value: ' << allSet.all() << endl; cout << 'none() value: ' << allSet.none() << endl; cout << 'test() at index 0: ' << noboolalpha << allSet.test(index) << endl; cout << 'size() value: ' << allSet.size() << endl; cout << 'Value of allUnset on before using set(): ' << allUnset << endl; allUnset.set(index); cout << 'Value of allUnset on after using set(): ' << allUnset << endl; cout << 'Value of allSet on before using reset(): ' << allSet << endl; allSet.reset(index); cout << 'Value of allSet on after using reset(): ' << allSet << endl; // declaring an empty string string bitString; // using to_string() method to assign value to empty // string bitString = allSet.to_string(); cout << 'bitString: ' << bitString << endl; cout << 'Unsigned Long value: ' << allSet.to_ulong(); return 0; }> 出力
any() value: true all() value: true none() value: false test() at index 0: 1 size() value: 4 Value of allUnset on before using set(): 0000 Value of allUnset on after using set(): 0001 Value of allSet on before using reset(): 1111 Value of allSet on after using reset(): 1110 bitString: 1110 Unsigned Long value: 14>
注記: boolalpha は、ブール値の場合は 1 または 0、その逆の場合は noboolalpha の代わりに、true と false を出力するために使用されます。
std::bitset 演算子
基本的な演算子の一部は、ビットセット オブジェクトを操作するためにオーバーロードされています。これらの演算子のリストは次のとおりです。
オペレーター | 手術 |
|---|---|
[] | アクセス オペレーター |
& | ビットごと そして |
| | ビットごと または |
! | ビットごと 無料 |
>>= | バイナリ 右シフト そして割り当てます |
<<= | バイナリ 左方移動 そして割り当てます |
&= | ビット単位の値を代入します そして 最初のビットセットに。 |
|= | ビット単位の値を代入します または 最初のビットセットに。 |
^= | ビット単位の値を代入します 無料 最初のビットセットに。 |
~ | ビットごと ない |
例:
C++ // C++ program to show the different operator functions on // bitset #include #include using namespace std; int main() = bitset2) << endl; // bitwise NOT cout << 'Bitwise NOT: ' << (result = ~bitset1) << endl; // bitwise XOR bitset1 = 9; cout << 'Bitwise XOR: ' << (bitset1 ^= bitset2) << endl; bitset1 = 9; cout << 'Binary leftshift on bitwise1: ' << (bitset1 <<= 1) << endl; bitset1 = 9; cout << 'Binary rightshift on bitwise1: ' << (bitset1>>= 1)<< endl; return 0;>
出力
スイング付きジャワ
Bitset1: 1001 Bitset2: 1010 Accessing bit value at index 1 of bitset1: 0 Bitwise AND using &: 1000 Bitwise AND using &=: 1000 Bitwise OR using |: 1011 Bitwise OR using |=: 1011 Bitwise NOT: 0100 Bitwise XOR: 0011 Binary leftshift on bitwise1: 0010 Binary rightshift on bitwise1: 0100>
std::bitset と std::vector および bool の配列の違い
ブール値のベクトルとブール値の配列を実装して、ビットセットのようなブール値のシーケンスを格納することもできますが、各実装にはいくつかの違いがあります。
| パラメータ | ビットセット | ブールのベクトル | ブール値の配列 |
|---|---|---|---|
| 意味 | 各ビットがメモリの 1 ビットを占有するように格納されたビットのシーケンスで構成されるクラス テンプレート。 | C++ STL のベクトルのバリエーション。各要素のサイズは 1 ビットで、型は bool です。 | ブール データ要素の固定サイズの連続コレクション。 |
| サイズ | 固定サイズ。 | ダイナミックサイズ。 | 固定サイズ。 |
| メモリ | 単一の要素はメモリの 1 ビットを占有します。 | 単一の要素はメモリの 1 ビットを占有します。 | 1 つの要素は 1 バイトのメモリを占有します。 |
| スピード | 同じ | 同じ | もっと早く |