Et bitsett er en rekke booler, men hver boolske verdi lagres ikke i en separat byte i stedet, bitsett optimerer plassen slik at hver boolske verdi tar kun 1-bits plass , så plass tatt av bitsett er mindre enn det for en matrise av bool eller vektor av bool .
En begrensning av bitsettet er det størrelsen må være kjent på kompileringstidspunktet, dvs. størrelsen på bitsettet er fast.
std::bitsett er klassemalen for bitsett som er definert inne header-fil så vi må inkludere header-filen før vi bruker bitsett i programmet vårt.
Syntaks:
hvis annet java
bitset variable_name(initialization);>
Vi kan initialisere bitsett på tre måter:
1. Ikke initialisert: Alle bitene vil bli satt til null.
bitset variable_name;>
2. Initialisering med desimaltall: Bitset vil representere det gitte desimaltallet i binær form.
bitset variable_name(DECIMAL_NUMBER);>
3. Initialisering med binær streng: Bitset vil representere den gitte binære strengen.
bitset variable_name(string('BINARY_STRING')); bitset variable_name('BINARY_STRING');>Eksempel:
C++ // C++ program to demonstrate the bitset #include #include using namespace std; int main() { // declaring an uninitialized bitset object bitset<8>uninitializedBitset; // initialisering med desimaltall bitsett<8>desimalBitset(15); // initialisering med binær strengbitsett<8>stringBitset(string('1111')); cout<< 'Uninitialized bitset: ' << uninitializedBitset << endl; cout << 'Initialized with decimal: ' << decimalBitset << endl; cout << 'Initialized with string: ' << stringBitset << endl; return 0; }> Produksjon
Uninitialized bitset: 00000000 Initialized with decimal: 00001111 Initialized with string: 00001111>
std::bitset Medlemsfunksjoner
std::bitset-klassen inneholder noen nyttige medlemsfunksjoner for å jobbe med bitset-objektene. Her er listen over noen medlemsfunksjoner til std::bitset:
Funksjonsnavn | Funksjonsbeskrivelse |
|---|---|
sett() | Sett bitverdi ved gitt indeks til 1 . |
nullstille() | Sett bitverdi ved en gitt indeks til 0 . |
flip() | Vend bitverdien ved gitt indeks. |
telle() | Telle antall sette biter . |
test() | Returnerer boolsk verdi ved gitt indeks . |
noen() | Sjekker om noen bit er sett . |
ingen() | Sjekker om ingen bit er sett. |
alle() | Sjekk om alle bit er sett. |
størrelse() | Returnerer størrelsen på bitsettet. |
to_string() | Konverterer bitsett til std::streng. |
å følge() | Konverterer bitsett til usignert lang. |
to_ullong() | Konverterer bitsett til usignert lang lang. |
Eksempel:
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; }> Produksjon
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>
Merk: boolalpha brukes til å skrive ut sant og usant i stedet for 1 eller 0 for boolske verdier og noboolalpha for motsatt.
std::bitset-operatører
Noen av de grunnleggende operatørene er overbelastet til å jobbe med bitsettobjekter. Følgende er listen over disse operatørene:
Operatør | Operasjon |
|---|---|
[] | Adgang operatør |
& | Bitvis OG |
| | Bitvis ELLER |
! | Bitvis GRATIS |
>>= | Binær Høyre skift og tildele |
<<= | Binær Venstre shift og tildele |
&= | Tilordne verdien av bitvis OG til det første bitsettet. |
|= | Tilordne verdien av bitvis ELLER til det første bitsettet. |
^= | Tilordne verdien av bitvis GRATIS til det første bitsettet. |
~ | Bitvis IKKE |
Eksempel:
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;>
Produksjon
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>
Forskjellen mellom std::bitset og std::vektor og en matrise med bool
Vektor av bool og array of bool kan også implementeres for å lagre en sekvens av boolske verdier som bitsett, men det er noen forskjeller mellom hver implementering:
| Parameter | bitsett | vektor av bool | rekke bool |
|---|---|---|---|
| Definisjon | En klassemal som består av en sekvens av biter lagret slik at hver bit opptar 1 bit minne. | En variant av vektorer av C++ STL der hvert element er av størrelse 1 bit og er av typen bool | En sammenhengende samling av bool-dataelementer med fast størrelse. |
| Størrelse | Fast størrelse. | Dynamisk størrelse. | Fast størrelse. |
| Hukommelse | Et enkelt element opptar 1 bit minne. | Et enkelt element opptar 1 bit minne. | Et enkelt element opptar 1 byte med minne. |
| Hastighet | Samme | Samme | Raskere |