logo

C++ ビットセットとその応用

ビットセットはブール値の配列ですが、各ブール値は別個のバイトに格納されるのではなく、ビットセットは次のようにスペースを最適化します。 各ブール値は 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 バイトのメモリを占有します。
スピード 同じ同じもっと早く