logo

C++ bitset en de toepassing ervan

Een bitset is een array van bools, maar elke booleaanse waarde wordt niet in een afzonderlijke byte opgeslagen. Bitset optimaliseert de ruimte zodanig dat elke Booleaanse waarde neemt slechts 1 bit ruimte in beslag , Dus de ruimte die door de bitset wordt ingenomen, is kleiner dan die van een array van bool of vector van bool .

Een beperking van de bitset is dat de grootte moet bekend zijn tijdens het compileren, d.w.z. de grootte van de bitset staat vast.



std::bitset is de klassensjabloon voor bitset die erin is gedefinieerd header-bestand dus we moeten het headerbestand opnemen voordat we bitset in ons programma gebruiken.

Syntaxis:

bitset variable_name(initialization);>

We kunnen bitset op drie manieren initialiseren:



1. Niet-geïnitialiseerd: Alle bits worden op nul gezet.

bitset variable_name;>

2. Initialisatie met decimaal geheel getal: Bitset vertegenwoordigt het opgegeven decimale getal in binaire vorm.

bitset variable_name(DECIMAL_NUMBER);>

3. Initialisatie met binaire string: Bitset vertegenwoordigt de gegeven binaire string.



bitset variable_name(string('BINARY_STRING')); bitset variable_name('BINARY_STRING');>

Voorbeeld:

C++
// C++ program to demonstrate the bitset  #include  #include  using namespace std; int main() {  // declaring an uninitialized bitset object  bitset<8>niet-geïnitialiseerdeBitset;  // initialisatie met bitset met decimaal getal<8>decimaalBitset(15);  // initialisatie met binaire stringbitset<8>stringBitset(string('1111'));  uit<< 'Uninitialized bitset: ' << uninitializedBitset  << endl;  cout << 'Initialized with decimal: ' << decimalBitset  << endl;  cout << 'Initialized with string: ' << stringBitset  << endl;  return 0; }>

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

std::bitset-lidfuncties

std::bitset klasse bevat enkele nuttige lidfuncties om aan de bitset-objecten te werken. Hier is de lijst met enkele lidfuncties van std::bitset:

Functienaam

Functiebeschrijving

set()

jlijst
Stel de beetje waarde bij de opgegeven index naar 1 .

opnieuw instellen()

Stel de beetje waarde bij een bepaalde index naar 0 .

omdraaien()

Draai de bitwaarde om bij de opgegeven index.

graaf()

arp-a-opdracht
Graaf het aantal stukjes instellen .

test()

Retourneert de Booleaanse waarde bij de opgegeven index .

elk()

Controleert of elk beetje is set .

geen()

Controleert of geen beetje is set.

alle()

Controleer of alle beetje is set.

maat()

Retourneert de grootte van de bitset.

to_string()

Converteert bitset naar std::string.

volgen()

Converteert bitset op niet-ondertekend lang.

to_ullong()

Converteert bitset op niet-ondertekend lang lang.

Voorbeeld:

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;  uit<< '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; }>

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

Opmerking: boolalpha wordt gebruikt om waar en onwaar af te drukken in plaats van 1 of 0 voor booleaanse waarden en noboolalpha voor het tegenovergestelde.

std::bitset-operatoren

Sommige basisoperatoren zijn overbelast om met bitsetobjecten te werken. Hieronder volgt de lijst met deze operators:

Exploitant

Operatie

[]

Toegang exploitant

&

Bitsgewijs EN

|

Bitsgewijs OF

!

Bitsgewijs VRIJ

>>=

Binair Rechts verschuiven en toewijzen

<<=

Binair Linker shift en toewijzen

&=

Wijs de waarde van bitwise toe EN naar de eerste bitset.

|=

Wijs de waarde van bitwise toe OF naar de eerste bitset.

^=

Wijs de waarde van bitwise toe VRIJ naar de eerste bitset.

~

Bitsgewijs NIET

Voorbeeld:

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


Uitvoer

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>

Verschil tussen std::bitset en std::vector en een array van bool

Vector van bool en array van bool kunnen ook worden geïmplementeerd om een ​​reeks Booleaanse waarden zoals bitset op te slaan, maar er zijn enkele verschillen tussen elke implementatie:

Parameter

bitset

ontsnap karakter Java

vector van bool

reeks bool

Definitie Een klassensjabloon bestaande uit een reeks bits die zodanig zijn opgeslagen dat elke bit 1 bit geheugen in beslag neemt.Een variatie van vectoren van C++ STL waarin elk element een grootte van 1 bit heeft en van het type bool isEen aaneengesloten verzameling bool-gegevenselementen met een vaste grootte.
Maat Vaste maat.Dynamische grootte.Vaste maat.
Geheugen Eén enkel element neemt 1 bit geheugen in beslag.Eén enkel element neemt 1 bit geheugen in beslag.Eén enkel element neemt 1 byte geheugen in beslag.
Snelheid DezelfdeDezelfdeSneller