logo

C++ bitset og dets anvendelse

Et bitsæt er et array af booler, men hver boolsk værdi gemmes ikke i en separat byte i stedet, bitsæt optimerer rummet, således at hver boolesk værdi tager kun 1-bit plads , så plads, der tages af bitsæt, er mindre end den for en matrix af bool eller vektor af bool .

En begrænsning af bitsættet er det størrelsen skal være kendt på kompileringstidspunktet, dvs. størrelsen på bitsættet er fast.



std::bitset er klasseskabelonen for bitsæt, der er defineret inde header-fil så vi skal inkludere header-filen, før vi bruger bitset i vores program.

Syntaks:

hvis ellers java
bitset variable_name(initialization);>

Vi kan initialisere bitsæt på tre måder:



1. Ikke initialiseret: Alle bits vil blive sat til nul.

bitset variable_name;>

2. Initialisering med decimalt heltal: Bitset vil repræsentere det givne decimaltal i binær form.

bitset variable_name(DECIMAL_NUMBER);>

3. Initialisering med binær streng: Bitset vil repræsentere den givne binære streng.



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>uinitialiseretBitset;  // initialisering med bitsæt med decimaltal<8>decimalBitset(15);  // initialisering med binær streng bitset<8>stringBitset(streng('1111'));  cout<< 'Uninitialized bitset: ' << uninitializedBitset  << endl;  cout << 'Initialized with decimal: ' << decimalBitset  << endl;  cout << 'Initialized with string: ' << stringBitset  << endl;  return 0; }>

Produktion
Uninitialized bitset: 00000000 Initialized with decimal: 00001111 Initialized with string: 00001111>

std::bitset Medlemsfunktioner

std::bitset-klassen indeholder nogle nyttige medlemsfunktioner til at arbejde på bitset-objekterne. Her er listen over nogle medlemsfunktioner i std::bitset:

Funktionsnavn

Funktionsbeskrivelse

sæt()

Indstil bitværdi ved det givne indeks til 1 .

Nulstil()

Indstil bitværdi ved et givet indeks til 0 .

flip()

Vend bitværdien ved det givne indeks.

tælle()

Tælle antallet af sæt bits .

prøve()

Returnerer boolesk værdi ved det givne indeks .

nogen()

Tjekker hvis nogen lidt er sæt .

ingen()

Tjekker hvis ingen lidt er sæt.

alle()

Tjek evt alle lidt er sæt.

størrelse()

Returnerer størrelsen af ​​bitsættet.

to_string()

Konverterer bitset til std::streng.

at følge()

Konverterer bitset til usigneret lang.

to_ullong()

Konverterer bitset til usigneret 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; }>

Produktion
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>

Bemærk: boolalpha bruges til at udskrive sand og falsk i stedet for 1 eller 0 for boolske værdier og noboolalpha for modsat.

std::bitset-operatører

Nogle af de grundlæggende operatører er overbelastede til at arbejde med bitset-objekter. Følgende er listen over disse operatører:

Operatør

Operation

[]

Adgang operatør

&

Bitvis OG

|

Bitvis ELLER

!

Bitvis GRATIS

>>=

Binær Højre skift og tildele

<<=

Binær Venstre skift og tildele

&=

Tildel værdien af ​​bitvis OG til det første bitsæt.

|=

Tildel værdien af ​​bitvis ELLER til det første bitsæt.

^=

Tildel værdien af ​​bitvis GRATIS til det første bitsæt.

~

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;>


Produktion

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>

Forskellen mellem std::bitset og std::vektor og et array af bool

Vektor af bool og array af bool kan også implementeres til at gemme en sekvens af boolske værdier som bitset, men der er nogle forskelle mellem hver implementering:

Parameter

bitsæt

vektor af bool

række bool

Definition En klasseskabelon, der består af en sekvens af bit, der er lagret således, at hver bit optager 1 bit hukommelse.En variation af vektorer af C++ STL, hvor hvert element er af størrelse 1 bit og er af typen boolEn sammenhængende samling af bool-dataelementer i fast størrelse.
Størrelse Fast størrelse.Dynamisk størrelse.Fast størrelse.
Hukommelse Et enkelt element optager 1 bit hukommelse.Et enkelt element optager 1 bit hukommelse.Et enkelt element optager 1 byte hukommelse.
Fart SammeSammeHurtigere