Un bitset è un array di valori booleani ma ogni valore booleano non viene invece memorizzato in un byte separato, bitset ottimizza lo spazio in modo tale che ogni valore booleano occupa solo 1 bit di spazio , COSÌ lo spazio occupato da bitset è inferiore a quello di un array di bool o di un vettore di bool .
Una limitazione del bitset è questa la dimensione deve essere nota in fase di compilazione, ovvero la dimensione del bitset è fissa.
std::bitset è il modello di classe per bitset definito all'interno file di intestazione quindi dobbiamo includere il file di intestazione prima di utilizzare bitset nel nostro programma.
Sintassi:
bitset variable_name(initialization);>
Possiamo inizializzare bitset in tre modi:
1. Non inizializzata: Tutti i bit verranno impostati su zero.
bitset variable_name;>
2. Inizializzazione con intero decimale: Bitset rappresenterà il numero decimale specificato in forma binaria.
bitset variable_name(DECIMAL_NUMBER);>
3. Inizializzazione con stringa binaria: Bitset rappresenterà la stringa binaria data.
ordinamento per inserimento java
bitset variable_name(string('BINARY_STRING')); bitset variable_name('BINARY_STRING');>Esempio:
C++ // C++ program to demonstrate the bitset #include #include using namespace std; int main() { // declaring an uninitialized bitset object bitset<8>Bitset non inizializzato; // inizializzazione con bitset di numeri decimali<8>decimalBitset(15); // inizializzazione con bitset di stringa binaria<8>stringBitset(string('1111')); cout<< 'Uninitialized bitset: ' << uninitializedBitset << endl; cout << 'Initialized with decimal: ' << decimalBitset << endl; cout << 'Initialized with string: ' << stringBitset << endl; return 0; }> Produzione
Uninitialized bitset: 00000000 Initialized with decimal: 00001111 Initialized with string: 00001111>
Funzioni membro std::bitset
La classe std::bitset contiene alcune funzioni membro utili per lavorare sugli oggetti bitset. Ecco l'elenco di alcune funzioni membro di std::bitset:
Nome della funzione | Descrizione della funzione |
|---|---|
impostato() | Impostare il valore di bit all'indice dato a 1 . |
Ripristina() | Impostare il valore di bit ad un dato indice a 0 . |
Flip() | Invertire il valore del bit all'indice dato. |
contare() | Contare il numero di impostare i bit . |
test() | Restituisce il valore booleano all'indice dato . |
Qualunque() | Controlla se Qualunque un po' lo è impostato . |
nessuno() | Controlla se nessuno un po' lo è impostato. |
Tutto() | Controlla se Tutto un po' lo è impostato. |
misurare() | Restituisce il dimensione del bitset. |
accordare() | Converte bitset su std::string. |
da seguire() | Converte bitset su unsigned long. |
to_ullong() | Converte bitset su senza segno lungo lungo. |
Esempio:
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; }> Produzione
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 viene utilizzato per stampare vero e falso invece di 1 o 0 per i valori booleani e noboolalpha per il contrario.
Operatori std::bitset
Alcuni degli operatori di base sono sovraccaricati per funzionare con oggetti bitset. Di seguito l'elenco di tali operatori:
Operatore | Operazione |
|---|---|
[] | Accesso operatore |
& | Bit per bit E |
| | Bit per bit O |
! | Bit per bit GRATUITO |
>>= | Binario Spostamento a destra e assegnare |
<<= | Binario Tasto maiuscolo di sinistra e assegnare |
&= | Assegnare il valore di bit a bit E al primo bitset. |
|= | Assegnare il valore di bit a bit O al primo bitset. |
^= | Assegnare il valore di bit a bit GRATUITO al primo bitset. |
~ | Bit per bit NON |
Esempio:
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;>
Produzione
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>
Differenza tra std::bitset e std::vettoriale e un array di bool
Vector of bool e array of bool possono anche essere implementati per memorizzare una sequenza di valori booleani come bitset ma ci sono alcune differenze tra ciascuna implementazione:
| Parametro | bitset | vettore di bool | array di bool |
|---|---|---|---|
| Definizione | Un modello di classe costituito da una sequenza di bit archiviati in modo tale che ciascun bit occupi 1 bit di memoria. | Una variazione di vettori di C++ STL in cui ogni elemento ha dimensione 1 bit ed è di tipo bool | Una raccolta contigua di dimensioni fisse di elementi di dati bool. |
| Misurare | Taglia unica. | Dimensione dinamica. | Taglia unica. |
| Memoria | Un singolo elemento occupa 1 bit di memoria. | Un singolo elemento occupa 1 bit di memoria. | Un singolo elemento occupa 1 byte di memoria. |
| Velocità | Stesso | Stesso | Più veloce |