logo

Bitset C++ e sua applicazione

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 boolUna 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à StessoStessoPiù veloce