C++ bitset mielenkiintoisia faktoja

Bitset on C++ Standard Template Libraryn säilö datan käsittelemiseen bittitasolla. 

1. Bittijoukko tallentaa bittejä (elementtejä, joilla on vain kaksi mahdollista arvoa: 0 tai 1). Voimme kuitenkin saada osan merkkijonosta antamalla paikat bittijoukon rakentajalle (Sijainnit ovat suhteessa merkkijonopaikkaan vasemmalta oikealle)

Esimerkki:

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

Lähtö:

00110010 00000010 00000001 

2. Voimme rakentaa bittijoukon käyttämällä merkkejä std::basic_string _str. Valinnainen aloituspaikka _pos ja pituus _n voidaan tarjota sekä merkkejä, jotka ilmaisevat vaihtoehtoisia arvoja set (_one) ja unset (_zero) biteille. 

Syntaksi:

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  
  • Jos _pos > str.size(), tämä rakentaja heittää std::out_of_range.
  • Jos jokin _str:ssä tutkitusta merkistä ei ole nolla tai yksi, se heittää std::invalid_argumentin.
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'  ;      }      

Lähtö:

01001101 

3. Muodostaa luokan bittijoukon objektin alustaen N bittiä arvoiksi, jotka vastaavat c-tyylisessä nollien ja ykkösten merkkijonossa olevia merkkejä. Kutsut konstruktoria muuttamatta merkkijonoa merkkijonotyypiksi. Siinä on myös kaksi valinnaista parametria _Zero ja _One, jotka osoittavat, mikä merkki _Str:ssä on tulkittava tarkoittavan 0 bittiä ja 1 bittiä.

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

Lähtö:

00001111 

Bitset-toiminnot

1. std::bitset::to_string()  
Muuntaa bittijoukon sisällön merkkijonoksi. Käyttää nollaa edustamaan bittejä, joiden arvo on epätosi, ja yhtä edustamaan bittejä, joiden arvo on tosi. Tuloksena oleva merkkijono sisältää N merkkiä, joista ensimmäinen merkki vastaa viimeistä (N-1.) bittiä ja viimeinen merkki ensimmäistä bittiä. Voimme myös välittää parametrien kautta merkit, joilla tulostetaan tosi ja epätosi.

Esimerkki:

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

Lähtö:

00101010 **1*1*1* OOXOXOXO 

2. stz::bitt.  
Muuntaa bittijoukon sisällön etumerkittömäksi pitkäksi kokonaisluvuksi. Bittijoukon ensimmäinen bitti vastaa luvun vähiten merkitsevää numeroa ja viimeinen bitti vastaa eniten merkitsevää numeroa. Funktio heittää std::overflow_error, jos arvoa ei voida esittää etumerkittömässä pituudessa.

Esimerkki:

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

Lähtö:

5