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