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:
| Ime funkcije | Opis funkcije |
|---|---|
| set() | Nastavite bitna vrednost pri podanem indeksu do 1 . |
| ponastaviti() | Nastavite bitna vrednost pri danem indeksu na 0 . |
| flip() | 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 |
| & | 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. |
| ^= | 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 bool | Neprekinjena 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 | Enako | Enako | Hitreje |