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 |