Bitų rinkinys yra loginių elementų masyvas, tačiau kiekviena loginė reikšmė nėra saugoma atskirame baite, bitų rinkinys optimizuoja erdvę taip, kad kiekviena loginė reikšmė užima tik 1 bito vietos , taip bitų rinkinio užimama erdvė yra mažesnė nei bool masyvo arba bool vektoriaus .
Bitų rinkinio apribojimas yra tas dydis turi būti žinomas kompiliavimo metu, ty bitų rinkinio dydis yra fiksuotas.
std::bitset yra viduje apibrėžto bitų rinkinio klasės šablonas antraštės failą todėl prieš naudodami bitų rinkinį savo programoje turime įtraukti antraštės failą.
fcfs
Sintaksė:
bitset variable_name(initialization);>
Mes galime inicijuoti bitų rinkinį trimis būdais:
1. Neinicializuotas: Visi bitai bus nustatyti į nulį.
bitset variable_name;>
2. Inicijuoti sveikuoju dešimtainiu skaičiumi: Bitset pateiks nurodytą dešimtainį skaičių dvejetaine forma.
bitset variable_name(DECIMAL_NUMBER);>
3. Inicijavimas naudojant dvejetainę eilutę: Bitset atstovaus duotą dvejetainę eilutę.
bitset variable_name(string('BINARY_STRING')); bitset variable_name('BINARY_STRING');>Pavyzdys:
C++ // C++ program to demonstrate the bitset #include #include using namespace std; int main() { // declaring an uninitialized bitset object bitset<8>uninitializedBitset; // inicijavimas naudojant dešimtainių skaičių bitų rinkinį<8>dešimtainis bitų skaičius (15); // inicijavimas naudojant dvejetainės eilutės bitų rinkinį<8>stringBitset(string('1111')); cout<< 'Uninitialized bitset: ' << uninitializedBitset << endl; cout << 'Initialized with decimal: ' << decimalBitset << endl; cout << 'Initialized with string: ' << stringBitset << endl; return 0; }> Išvestis
Uninitialized bitset: 00000000 Initialized with decimal: 00001111 Initialized with string: 00001111>
std::bitset Narių funkcijos
std::bitset klasėje yra keletas naudingų narių funkcijų, skirtų dirbti su bitų rinkinio objektais. Čia yra kai kurių std::bitset narių funkcijų sąrašas:
Funkcijos pavadinimas | Funkcijos aprašymas |
|---|---|
rinkinys () | Nustatyti bitų vertė esant nurodytam indeksui iki 1 . |
iš naujo () | Nustatyti bitų vertė esant tam tikram indeksui iki 0 . |
apversti () | Apverskite bitų vertę esant nurodytam indeksui. |
skaiciuoti () analizuojant eilutę į int | Suskaičiuoti skaičius nustatyti bitai . |
testas () | Grąžina loginė vertė esant nurodytam indeksui . |
bet koks () | Patikrina, ar bet koks bitas yra rinkinys . |
nė vienas() | Patikrina, ar nė vienas bitas yra rinkinys. |
visi () | Patikrinkite, ar visi bitas yra rinkinys. |
dydis () | Grąžina bitų rinkinio dydis. |
to_string() | Konvertuoja bitų rinkinys į std::string. |
Sekti() | Konvertuoja bitų rinkinys iki nepasirašyto ilgio. |
to_ullong () | Konvertuoja bitset to unsigned long long. |
Pavyzdys:
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; }> Išvestis
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>
Pastaba: „Boolalpha“ naudojama spausdinti „true“ ir „false“, o ne 1 arba 0 loginėms reikšmėms, o noboolalpha – priešingai.
std::bitset operatoriai
Kai kurie pagrindiniai operatoriai yra perkrauti dirbti su bitų rinkinio objektais. Toliau pateikiamas šių operatorių sąrašas:
operatorius | Operacija |
|---|---|
[] | Prieiga operatorius |
& | Bitiškai IR |
| | Bitiškai ARBA |
! | Bitiškai LAISVAS |
>>= | Dvejetainis Dešinysis posūkis ir priskirti |
<<= | Dvejetainis Kairė pamaina ir priskirti |
&= | Priskirkite bitų reikšmę IR į pirmąjį bitų rinkinį. |
|= | Priskirkite bitų reikšmę ARBA į pirmąjį bitų rinkinį. |
^= | Priskirkite bitų reikšmę LAISVAS į pirmąjį bitų rinkinį. |
~ | Bitiškai NE |
Pavyzdys:
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;>
Išvestis
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>
Skirtumas tarp std::bitset ir std::vector ir bool masyvo
Būlio vektorius ir bool masyvas taip pat gali būti įgyvendinami, kad būtų saugoma loginių reikšmių seka, pvz., bitų rinkinys, tačiau yra keletas skirtumų tarp kiekvieno įgyvendinimo:
| Parametras | bitų rinkinys js pasaulinis kintamasis | bool vektorius | masyvas bool |
|---|---|---|---|
| Apibrėžimas | Klasės šablonas, susidedantis iš bitų sekos, saugomų taip, kad kiekvienas bitas užimtų 1 bitą atminties. | C++ STL vektorių variantas, kuriame kiekvienas elementas yra 1 bito dydžio ir bool tipo | Fiksuoto dydžio gretimas bool duomenų elementų rinkinys. |
| Dydis | Fiksuotas dydis. | Dinaminis dydis. | Fiksuotas dydis. |
| Atmintis | Vienas elementas užima 1 bitą atminties. | Vienas elementas užima 1 bitą atminties. | Vienas elementas užima 1 baitą atminties. |
| Greitis | Tas pats | Tas pats | Greičiau |