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