C++ bitsett og dets applikasjon
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:
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 |