C++ bitkopas interesanti fakti

Bitset ir C++ standarta veidņu bibliotēkas konteiners datu apstrādei bitu līmenī. 

1. Bitu kopa saglabā bitus (elementus ar tikai divām iespējamām vērtībām: 0 vai 1). Tomēr mēs varam iegūt virknes daļu, nodrošinot pozīcijas bitkopas konstruktoram (pozīcijas ir attiecībā pret virknes pozīciju no kreisās uz labo pusi)

Piemērs:

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

Izvade:

00110010 00000010 00000001 

2. Mēs varam izveidot bitkopu, izmantojot rakstzīmes std::basic_string _str. Var nodrošināt izvēles sākuma pozīciju _pos un garumu _n, kā arī rakstzīmes, kas apzīmē alternatīvas vērtības iestatītajiem (_one) un atiestatītajiem (_nulles) bitiem. 

Sintakse:

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  
  • Ja _pos > str.size(), šis konstruktors izmet std::out_of_range.
  • Ja kāda no _str pārbaudītajām rakstzīmēm nav nulle vai viens, tā izmet 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'  ;      }      

Izvade:

01001101 

3. Izveido klases bitu kopas objektu, inicializējot N bitus uz vērtībām, kas atbilst rakstzīmēm, kas nodrošinātas c stila rakstzīmju virknē ar nullēm un vieniniekiem. Jūs izsaucat konstruktoru, nepārveidojot virkni virknes veidā. Tam ir arī divi izvēles parametri _Zero un _One, kas norāda, kura rakstzīme _Str ir jāinterpretē kā attiecīgi 0 bits un 1 bits.

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

Izvade:

00001111 

Bitset operācijas

1. std::bitset::to_string()  
Pārvērš bitkopas saturu par virkni. Izmanto nulli, lai attēlotu bitus, kuru vērtība ir nepatiesa, un vienu, lai attēlotu bitus ar patieso vērtību. Iegūtā virkne satur N rakstzīmes, kur pirmā rakstzīme atbilst pēdējam (N-1) bitam un pēdējā rakstzīme, kas atbilst pirmajam bitam. Mēs varam arī caur parametriem nodot rakstzīmes, kas tiek izmantotas patiesas un nepatiesas vērtības drukāšanai.

Piemērs:

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

Izvade:

00101010 **1*1*1* OOXOXOXO 

2. stz::bitt.  
Pārvērš bitkopas saturu par neparakstītu garu veselu skaitli. Pirmais bitu kopas bits atbilst skaitļa vismazāk nozīmīgajam ciparam, bet pēdējais bits atbilst visnozīmīgākajam ciparam. Funkcija rada std::overflow_error, ja vērtību nevar attēlot ar neparakstītu garumu.

Piemērs:

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

Izvade:

5