Setul de biți C++ și aplicația acestuia

Un set de biți este o matrice de boole, dar fiecare valoare booleană nu este stocată într-un octet separat, setul de biți optimizează spațiul astfel încât fiecare valoare booleană ocupă doar spațiu de 1 bit , asa de spațiul ocupat de set de biți este mai mic decât cel al unui tablou de bool sau vector de bool .

O limitare a setului de biți este aceea dimensiunea trebuie cunoscută în momentul compilării, adică dimensiunea setului de biți este fixă.

std::bitset este șablonul de clasă pentru set de biți care este definit în interior fișier antet deci trebuie să includem fișierul antet înainte de a folosi bitset în programul nostru.

Sintaxă:

bitset variable_name(initialization); 

Putem inițializa set-ul de biți în trei moduri:

1. Neinițializat: Toți biții vor fi setați la zero.

bitset variable_name; 

2. Inițializare cu număr întreg zecimal: Bitset va reprezenta numărul zecimal dat în formă binară.

bitset variable_name(DECIMAL_NUMBER); 

3. Inițializare cu șir binar: Bitset va reprezenta șirul binar dat.

bitset variable_name(string('BINARY_STRING')); bitset variable_name('BINARY_STRING'); 

Exemplu:

C++
// C++ program to demonstrate the bitset  #include  #include  using namespace std; int main() {  // declaring an uninitialized bitset object  bitset <8>uninitializedBitset;  // inițializare cu un set de biți de număr zecimal <8>decimalBitset(15);  // inițializare cu un set de biți șir binar <8>stringBitset(string('1111'));  cout < < 'Uninitialized bitset: '  < < uninitializedBitset   < < endl;  cout  < < 'Initialized with decimal: '  < < decimalBitset   < < endl;  cout  < < 'Initialized with string: '  < < stringBitset   < < endl;  return 0; } 

Ieșire
Uninitialized bitset: 00000000 Initialized with decimal: 00001111 Initialized with string: 00001111 

Funcții membru std::bitset

Clasa std::bitset conține câteva funcții membre utile pentru a lucra asupra obiectelor bitset. Iată lista unor funcții membre ale std::bitset:

Numele funcției

Descrierea funcției

a stabilit()

Seteaza valoare de biți la indicele dat la 1 .

reset()

Seteaza valoare de biți la un indice dat la 0 .

flip()

Întoarceți valoarea biților la indicele dat.

numara()

Numara numarul setati biti .

Test()

Returnează valoare booleană la indicele dat .

orice()

Verifică dacă orice bit este a stabilit .

nici unul()

Verifică dacă nici unul bit este a stabilit.

toate()

Verifica daca toate bit este a stabilit.

mărimea()

Returnează dimensiunea setului de biți.

to_string()

Se convertește bitset la std::string.

a urma()

Se convertește bitset la unsigned long.

to_ullong()

Se convertește bitset la unsigned long long.

Exemplu:

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

Ieșire
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 

Notă: boolalpha este folosit pentru a tipări adevărat și fals în loc de 1 sau 0 pentru valori booleene și noboolalpha pentru opus.

Operatori std::bitset

Unii dintre operatorii de bază sunt supraîncărcați pentru a lucra cu obiecte bitset. Mai jos este lista acelor operatori:

Operator

Operațiune

[]

Acces operator

&

Pe bit ȘI

|

Pe bit SAU

!

Pe bit GRATUIT

>>=

Binar Schimbarea la dreapta și atribuie

< <=

Binar Schimb la stânga și atribuie

&=

Atribuiți valoarea bitwise ȘI la primul set de biți.

|=

Atribuiți valoarea bitwise SAU la primul set de biți.

^=

Atribuiți valoarea bitwise GRATUIT la primul set de biți.

~

Pe bit NU

Exemplu:

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; 


Ieșire

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 

Diferența dintre std::bitset și std::vector și o matrice de bool

Vector de bool și matrice de bool pot fi, de asemenea, implementate pentru a stoca o secvență de valori booleene, cum ar fi set de bit, dar există unele diferențe între fiecare implementare:

Parametru

set de biți

vector de bool

matrice de bool

Definiție Un șablon de clasă constând dintr-o secvență de biți stocați astfel încât fiecare bit să ocupe 1 bit de memorie. O variație a vectorilor C++ STL în care fiecare element are dimensiunea de 1 bit și este de tip bool O colecție contiguă de dimensiuni fixe de elemente de date bool.
mărimea Marime fixa. Dimensiune dinamică. Marime fixa.
Memorie Un singur element ocupă 1 bit de memorie. Un singur element ocupă 1 bit de memorie. Un singur element ocupă 1 octet de memorie.
Viteză La fel La fel Mai repede