Un conjunt de bits és una matriu de bools, però cada valor booleà no s'emmagatzema en un byte separat, el conjunt de bits optimitza l'espai de manera que cada valor booleà només ocupa un espai d'1 bit , tan L'espai ocupat pel conjunt de bits és menor que el d'una matriu de bool o vector de bool .
Una limitació del conjunt de bits és això la mida s'ha de conèixer en temps de compilació, és a dir, la mida del conjunt de bits està fixada.
std::bitset és la plantilla de classe per al conjunt de bits que es defineix dins fitxer de capçalera per tant, hem d'incloure el fitxer de capçalera abans d'utilitzar bitset al nostre programa.
Sintaxi:
bitset variable_name(initialization);>
Podem inicialitzar bitset de tres maneres:
1. Sense inicialitzar: Tots els bits es posaran a zero.
bitset variable_name;>
2. Inicialització amb nombre sencer decimal: Bitset representarà el nombre decimal donat en forma binària.
bitset variable_name(DECIMAL_NUMBER);>
3. Inicialització amb cadena binària: Bitset representarà la cadena binària donada.
bitset variable_name(string('BINARY_STRING')); bitset variable_name('BINARY_STRING');>Exemple:
derivada parcial del làtexC++
// C++ program to demonstrate the bitset #include #include using namespace std; int main() { // declaring an uninitialized bitset object bitset<8>uninitializedBitset; // inicialització amb un conjunt de bits de nombre decimal<8>decimalBitset(15); // inicialització amb un conjunt de bits de cadena binària<8>stringBitset(string('1111')); cout<< 'Uninitialized bitset: ' << uninitializedBitset << endl; cout << 'Initialized with decimal: ' << decimalBitset << endl; cout << 'Initialized with string: ' << stringBitset << endl; return 0; }> Sortida
Uninitialized bitset: 00000000 Initialized with decimal: 00001111 Initialized with string: 00001111>
std::bitset Funcions membres
La classe std::bitset conté algunes funcions membre útils per treballar amb els objectes de bitset. Aquí teniu la llista d'algunes funcions membres de std::bitset:
Nom de la funció | Descripció de la funció |
|---|---|
conjunt() | Estableix el valor de bits a l'índex donat a 1 . |
restablir () | Estableix el valor de bits en un índex determinat a 0 . |
voltejar () t ff | Inverteix el valor del bit a l'índex donat. |
comptar () | Compte el nombre de establir bits . |
prova () | Retorna el valor booleà a l'índex donat . |
cap() | Comprova si cap bit és conjunt . |
cap () | Comprova si cap bit és conjunt. |
tots () | Comproveu si tots bit és conjunt. |
mida () | Retorna el mida del conjunt de bits. |
to_string() | Converteix conjunt de bits a std::string. |
seguir() | Converteix bitset a llarg sense signar. |
to_ullong() | Converteix bitset a unsigned long long. |
Exemple:
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; }> Sortida
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>
Nota: boolalpha s'utilitza per imprimir true i false en lloc d'1 o 0 per als valors booleans i noboolalpha per al contrari.
std::bitset Operadors
Alguns dels operadors bàsics estan sobrecarregats per treballar amb objectes de conjunt de bits. A continuació es mostra la llista d'aquests operadors:
Operador | Funcionament |
|---|---|
[] | Accés operador |
& xarxa i internet | Bit a bit I |
| | Bit a bit O |
! | Bit a bit GRATIS |
>>= | Binari Canvi a la dreta i assignar |
<<= | Binari Desviació a l'esquerra i assignar |
&= convertir cadena en nombre enter | Assigna el valor de bit a bit I al primer bitset. |
|= | Assigna el valor de bit a bit O al primer bitset. |
^= | Assigna el valor de bit a bit GRATIS al primer bitset. |
~ | Bit a bit NO |
Exemple:
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;>
Sortida
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>
Diferència entre std::bitset i std::vector i una matriu de bool
El vector de bool i la matriu de bool també es poden implementar per emmagatzemar una seqüència de valors booleans com el conjunt de bits, però hi ha algunes diferències entre cada implementació:
| Paràmetre | conjunt de bits | vector de bool | matriu de bool |
|---|---|---|---|
| Definició | Una plantilla de classe que consisteix en una seqüència de bits emmagatzemats de manera que cada bit ocupi 1 bit de memòria. | Una variació de vectors de C++ STL en què cada element és de mida d'1 bit i és de tipus bool | Una col·lecció contigua de mida fixa d'elements de dades bool. |
| Mida | Talla fixa. | Mida dinàmica. | Talla fixa. |
| Memòria | Un sol element ocupa 1 bit de memòria. | Un sol element ocupa 1 bit de memòria. | Un sol element ocupa 1 byte de memòria. |
| Velocitat | Mateix | Mateix | Més ràpid |