C++ ビットセットの興味深い事実

ビットセット ビット レベルでデータを処理するための C++ 標準テンプレート ライブラリのコンテナです。 

1. ビットセットにはビット (0 または 1 の 2 つの値のみを持つ要素) が格納されます。ただし、ビットセット コンストラクターに位置を指定することで文字列の一部を取得できます (位置は文字列の位置を左から右に基準としています)。

例:

C++
   // C++ program to demonstrate that we can get part of a    // bit string in bitset.   #include          #include         #include          int     main  ()   {      std  ::  string     bit_string     =     '110010'  ;      std  ::  bitset   <  8  >     b1  (  bit_string  );     // [0 0 1 1 0 0 1 0]      // string from position 2 till end      std  ::  bitset   <  8  >     b2  (  bit_string       2  );     // [0 0 0 0 0 0 1 0]      // string from position 2 till next 3 positions      std  ::  bitset   <  8  >     b3  (  bit_string       2       3  );     // [0 0 0 0 0 0 0 1]          std  ::  cout      < <     b1      < <     'n'      < <     b2      < <     'n'      < <     b3      < <     'n'  ;      return     0  ;   }      

出力:

00110010 00000010 00000001 

2. std::basic_string _str 内の文字を使用してビットセットを構築できます。オプションの開始位置 _pos と長さ _n を、設定 (_one) ビットと設定解除 (_zero) ビットの代替値を示す文字と同様に指定できます。 

構文:

std::bitset b1(str pos n zero one);   str   : string used to initialize the bitset   pos   : a starting offset into str   n   : number of characters to use from str   zero   : alternate character for unset bits in str   one   : alternate characters for set bits in str  
  • _pos > str.size() の場合、このコンストラクターは std::out_of_range をスローします。
  • _str で検査された文字が 0 または 1 ではない場合、std::invalid_argument がスローされます。
C++
   // C++ program to demonstrate that we can construct bitset using    // alternate characters for set and unset bits.    #include             #include            #include             int     main  ()      {         // string constructor using custom zero/one digits       std  ::  string     alpha_bit_string     =     'aBaaBBaB'  ;         std  ::  bitset   <  8  >     b1  (  alpha_bit_string       0       alpha_bit_string  .  size  ()         'a'       'B'  );     // [01001101]       std  ::  cout      < <     b1      < <     'n'  ;      }      

出力:

01001101 

3. N ビットを、0 と 1 の C スタイル文字列で提供される文字に対応する値に初期化するクラス bitset のオブジェクトを構築します。文字列を文字列型にキャストせずにコンストラクターを呼び出します。また、2 つのオプションのパラメータ _Zero と _One もあり、_Str 内のどの文字がそれぞれ 0 ビットと 1 ビットを意味すると解釈されるかを示します。

C++
   #include          #include          int     main  ()      {      // char* constructor using custom digits      std  ::  bitset   <  8  >     b1  (  'XXXXYYYY'       8       'X'       'Y'  );     // [0 0 0 0 1 1 1 1]      std  ::  cout      < <     b1      < <     'n'  ;   }   

出力:

00001111 

ビットセットの操作

1. std::bitset::to_string()  
ビットセットの内容を文字列に変換します。 false の値を持つビットを表すには 0 を使用し、true の値を持つビットを表すには 1 を使用します。結果の文字列には N 個の文字が含まれており、最初の文字は最後の (N-1 番目) ビットに対応し、最後の文字は最初のビットに対応します。また、パラメータを通じて true と false の値を出力するために使用される文字を渡すこともできます。

例:

C++
   // C++ program to demonstrate that we can convert contents   // of bitset to a string.   #include          #include          int     main  ()   {      std  ::  bitset   <  8  >     b  (  42  );      std  ::  cout      < <     b  .  to_string  ()      < <     'n'       < <     b  .  to_string  (  '*'  )      < <     'n'       < <     b  .  to_string  (  'O'       'X'  )      < <     'n'  ;   }   

出力:

00101010 **1*1*1* OOXOXOXO 

2. stz::bitt。  
ビットセットの内容を符号なし長整数に変換します。ビットセットの最初のビットは数値の最下位桁に対応し、最後のビットは最上位桁に対応します。値が unsigned long で表現できない場合、関数は std::overflow_error をスローします。

例:

C++
   // C++ program to demonstrate that we can get value of bitset   // as unsigned long integer.   #include          #include              int     main  ()   {      std  ::  bitset   <  5  >     b  (  5  );      std  ::  cout      < <     b  .  to_ulong  ()      < <     'n'  ;      }   

出力:

5