logo

C++ bitset i la seva aplicació

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àtex
C++
// 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 boolUna 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 MateixMateixMés ràpid