logo

C++ bitset och dess tillämpning

En bituppsättning är en array av booler men varje booleskt värde lagras inte i en separat byte istället, bituppsättning optimerar utrymmet så att varje booleskt värde tar endast 1-bitars utrymme , alltså utrymme som tas av bitset är mindre än det för en array av bool eller vektor av bool .

En begränsning av bituppsättningen är det storleken måste vara känd vid kompilering, dvs. storleken på bituppsättningen är fast.



std::bitset är klassmallen för bituppsättning som är definierad inuti header-fil så vi måste inkludera header-filen innan vi använder bitset i vårt program.

alfabetiska siffror

Syntax:

bitset variable_name(initialization);>

Vi kan initiera bitset på tre sätt:



1. Oinitierad: Alla bitar kommer att nollställas.

bitset variable_name;>

2. Initiering med decimalt heltal: Bitset kommer att representera det givna decimaltalet i binär form.

bitset variable_name(DECIMAL_NUMBER);>

3. Initiering med binär sträng: Bitset kommer att representera den givna binära strängen.



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

Exempel:

C++
// C++ program to demonstrate the bitset  #include  #include  using namespace std; int main() {  // declaring an uninitialized bitset object  bitset<8>uninitializedBitset;  // initiering med bituppsättning decimaltal<8>decimalBitset(15);  // initiering med binär strängbitset<8>stringBitset(string('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 innehåller några användbara medlemsfunktioner för att arbeta med bitsetobjekten. Här är listan över några medlemsfunktioner i std::bitset:

Funktionsnamn

Funktionsbeskrivning

uppsättning()

Ställ in bitvärde vid det givna indexet till 1 .

återställa()

Ställ in bitvärde vid ett givet index till 0 .

flip()

Vänd bitvärdet vid det givna indexet.

räkna()

c-program för tvådimensionell array
Räkna antalet ställ in bitar .

testa()

Returnerar booleskt värde vid det givna indexet .

några()

Kollar om några lite är uppsättning .

ingen()

Kollar om ingen lite är uppsättning.

Allt()

Kolla om Allt lite är uppsättning.

storlek()

Returnerar bitsetets storlek.

att stränga()

Konverterar bitset till std::string.

att följa()

Konverterar bitset till unsigned long.

to_ullong()

Konverterar bitset till unsigned long long.

Exempel:

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>

Notera: boolalpha används för att skriva ut sant och falskt istället för 1 eller 0 för booleska värden och noboolalpha för motsatt.

std::bitset-operatörer

Vissa av de grundläggande operatörerna är överbelastade för att arbeta med bituppsättningsobjekt. Följande är listan över dessa operatörer:

Operatör

Drift

[]

Tillgång operatör

&

Bitvis OCH

|

Bitvis ELLER

!

Bitvis FRI

>>=

Binär Högerväxling och tilldela

<<=

Binär Vänster Shift och tilldela

&=

Tilldela värdet för bitvis OCH till den första bituppsättningen.

|=

Tilldela värdet för bitvis ELLER till den första bituppsättningen.

^=

Tilldela värdet för bitvis FRI till den första bituppsättningen.

~

Bitvis INTE

Exempel:

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>

Skillnaden mellan std::bitset och std::vektor och en array av bool

Vektor av bool och array av bool kan också implementeras för att lagra en sekvens av booleska värden som bitset men det finns några skillnader mellan varje implementering:

Parameter

bituppsättning

runas i powershell

vektor av bool

utbud av bool

Definition En klassmall som består av en sekvens av bitar lagrade så att varje bit upptar 1 bit minne.En variant av vektorer av C++ STL där varje element är av storleken 1 bit och är av typen boolEn sammanhängande samling av bool-dataelement med fast storlek.
Storlek Fixad storlek.Dynamisk storlek.Fixad storlek.
Minne Ett enda element upptar 1 bit minne.Ett enda element upptar 1 bit minne.Ett enda element upptar 1 byte minne.
Fart SammaSammaSnabbare