C++ bitkészlet érdekes tények

Bitset a C++ Standard Template Library tárolója az adatok bitszintű kezelésére. 

1. A bitkészlet biteket tárol (csak két lehetséges értékkel rendelkező elemeket: 0 vagy 1). A karakterlánc részét azonban megkaphatjuk, ha pozíciókat adunk meg a bitkészlet-konstruktornak (a pozíciók a karakterlánc pozíciójához viszonyítva balról jobbra haladva)

Példa:

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  ;   }      

Kimenet:

00110010 00000010 00000001 

2. Készíthetünk bitkészletet az std::basic_string _str karaktereiből. Opcionálisan megadható egy _pos kezdőpozíció és _n hosszúság, valamint a beállított (_one) és unset (_nulla) bitek alternatív értékeit jelölő karakterek. 

Szintaxis:

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  
  • Ha _pos > str.size(), ez a konstruktor std::out_of_range értéket dob.
  • Ha a _str-ben megvizsgált bármely karakter nem nulla vagy egy, akkor az std::invalid_argumentet dobja.
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'  ;      }      

Kimenet:

01001101 

3. Létrehoz egy osztálybitkészlet objektumot, amely az N bitet olyan értékekre inicializálja, amelyek megfelelnek a nullákból és egyesekből álló c-stílusú karakterláncban megadott karaktereknek. Meghívja a konstruktort anélkül, hogy a karakterláncot karakterlánctípusba öntné. Két opcionális paramétere is van: _Zero és _One, amelyek azt jelzik, hogy a _Str melyik karakterét kell értelmezni 0 bitnek, illetve 1 bitnek.

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'  ;   }   

Kimenet:

00001111 

Bitset műveletek

1. std::bitset::to_string()  
A bitkészlet tartalmát karakterláncsá alakítja. Nullát használ a false értékű bitek, egyet pedig igaz értékű bitek megjelenítésére. Az eredményül kapott karakterlánc N karaktert tartalmaz, az első karakter az utolsó (N-1.) bitnek, az utolsó karakter pedig az első bitnek felel meg. Az igaz és hamis értékek nyomtatásához használt karaktereket is átadhatjuk a paramétereken keresztül.

Példa:

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'  ;   }   

Kimenet:

00101010 **1*1*1* OOXOXOXO 

2. stz::bitt.  
A bitkészlet tartalmát előjel nélküli hosszú egész számmá alakítja. A bitkészlet első bitje a szám legkisebb jelentőségű számjegyének, az utolsó bitje pedig a legjelentősebb számjegynek felel meg. A függvény std::overflow_error-t dob, ha az érték nem ábrázolható előjel nélküli hosszúsággal.

Példa:

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'  ;      }   

Kimenet:

5