logo

C++ bitset in njegova uporaba

Nabor bitov je niz logičnih vrednosti, vendar vsaka logična vrednost ni shranjena v ločenem bajtu, ampak nabor bitov optimizira prostor tako, da vsaka logična vrednost zavzame le 1-bitni prostor , torej prostor, ki ga zavzame bitset, je manjši od prostora matrike bool ali vektorja bool .

Omejitev bitseta je to velikost mora biti znana v času prevajanja, tj. velikost bitseta je fiksna.



std::bitset je predloga razreda za bitset, ki je definiran znotraj naslovna datoteka zato moramo pred uporabo bitset v našem programu vključiti datoteko glave.

Sintaksa:

bitset variable_name(initialization);>

Bitset lahko inicializiramo na tri načine:



1. Neinicializirano: Vsi biti bodo nastavljeni na nič.

bitset variable_name;>

2. Inicializacija z decimalnim celim številom: Bitset bo dano decimalno število predstavljal v binarni obliki.

bitset variable_name(DECIMAL_NUMBER);>

3. Inicializacija z binarnim nizom: Bitset bo predstavljal podani binarni niz.



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

primer:

C++
// C++ program to demonstrate the bitset  #include  #include  using namespace std; int main() {  // declaring an uninitialized bitset object  bitset<8>neinicializiranBitset;  // inicializacija z bitnim nizom decimalnih številk<8>decimalBitset(15);  // inicializacija z nizom binarnih nizov<8>stringBitset(string('1111'));  cout<< 'Uninitialized bitset: ' << uninitializedBitset  << endl;  cout << 'Initialized with decimal: ' << decimalBitset  << endl;  cout << 'Initialized with string: ' << stringBitset  << endl;  return 0; }>

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

std::bitset članske funkcije

Razred std::bitset vsebuje nekaj uporabnih članskih funkcij za delo na objektih bitset. Tukaj je seznam nekaterih članskih funkcij std::bitset:

array vs arraylist

Ime funkcije

Opis funkcije

set()

Nastavite bitna vrednost pri podanem indeksu do 1 .

ponastaviti()

Nastavite bitna vrednost pri danem indeksu na 0 .

flip()

naredite, ko ste v Javi
Obrnite vrednost bita pri podanem indeksu.

štetje ()

štetje število nastavite bite .

test()

Vrne logična vrednost pri podanem indeksu .

kaj()

Preverja, če kaj malo je set .

nič()

Preverja, če nič malo je set.

vse()

Preverite, če vse malo je set.

velikost ()

Vrne velikost bitseta.

to_string()

Spreobrne bitset v std::string.

slediti()

Spreobrne bitset v unsigned long.

to_ullong()

Spreobrne bitset v unsigned long long.

primer:

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

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

Opomba: boolalpha se uporablja za tiskanje true in false namesto 1 ali 0 za logične vrednosti in noboolalpha za nasprotne vrednosti.

Operatorji std::bitset

Nekateri osnovni operaterji so preobremenjeni za delo z bitset predmeti. Sledi seznam teh operaterjev:

Operater

Delovanje

[]

Dostop operater

&

omrežje in internet
Bitno IN

|

Bitno ALI

!

Bitno PROST

>>=

Binarno Desni premik in dodeli

<<=

Binarno Levi shift in dodeliti

&=

Bitno dodelite vrednost IN na prvi bitset.

|=

Bitno dodelite vrednost ALI na prvi bitset.

^=

myflixr
Bitno dodelite vrednost PROST na prvi bitset.

~

Bitno NE

primer:

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


Izhod

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>

Razlika med std::bitset in std::vector ter nizom bool

Vektor bool in polje bool je mogoče implementirati tudi za shranjevanje zaporedja logičnih vrednosti, kot je bitset, vendar obstaja nekaj razlik med vsako izvedbo:

Parameter

bitset

vektor bool

niz bool

Opredelitev Predloga razreda, sestavljena iz zaporedja bitov, shranjenih tako, da vsak bit zasede 1 bit pomnilnika.Različica vektorjev C++ STL, v kateri je vsak element velikosti 1 bit in je tipa boolNeprekinjena zbirka podatkovnih elementov bool fiksne velikosti.
Velikost Fiksna velikost.Dinamična velikost.Fiksna velikost.
Spomin Posamezen element zasede 1 bit pomnilnika.Posamezen element zasede 1 bit pomnilnika.Posamezen element zavzame 1 bajt pomnilnika.
Hitrost EnakoEnakoHitreje