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 .
sortare inserare java
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:
format șir în java
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() cum se schimbă șirul în int | 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 |
|---|---|
[] knn | 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 descărcare xvideoservicethief ubuntu 14.04 | 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 |