Bitu kopa ir būtības masīvs, taču katra Būla vērtība netiek saglabāta atsevišķā baitā, bet bitkopa optimizē vietu tā, lai katra Būla vērtība aizņem tikai 1 bita vietu , tātad bitkopas aizņemtā vieta ir mazāka nekā būtības masīva vai būtības vektora vieta .
Bitu kopas ierobežojums ir tāds lielumam jābūt zināmam kompilēšanas laikā, t.i., bitkopas lielums ir fiksēts.
std::bitset ir klases veidne bitkopai, kas ir definēta iekšpusē galvenes fails tāpēc pirms bitkopas izmantošanas programmā ir jāiekļauj galvenes fails.
Sintakse:
pārvēršot virkni par int
bitset variable_name(initialization);>
Mēs varam inicializēt bitkopu trīs veidos:
1. Neinicializēts: Visi biti tiks iestatīti uz nulli.
bitset variable_name;>
2. Inicializācija ar veselu decimālo skaitli: Bitset attēlos doto decimālo skaitli binārā formā.
bitset variable_name(DECIMAL_NUMBER);>
3. Inicializācija ar bināro virkni: Bitset pārstāvēs doto bināro virkni.
bitset variable_name(string('BINARY_STRING')); bitset variable_name('BINARY_STRING');>Piemērs:
C++ // C++ program to demonstrate the bitset #include #include using namespace std; int main() { // declaring an uninitialized bitset object bitset<8>uninitializedBitset; // inicializācija ar decimālskaitļu bitkopu<8>decimalBitset(15); // inicializācija ar bināro virkņu bitkopu<8>stringBitset(string('1111')); cout<< 'Uninitialized bitset: ' << uninitializedBitset << endl; cout << 'Initialized with decimal: ' << decimalBitset << endl; cout << 'Initialized with string: ' << stringBitset << endl; return 0; }> Izvade
Uninitialized bitset: 00000000 Initialized with decimal: 00001111 Initialized with string: 00001111>
std::bitset Dalībnieku funkcijas
std::bitset klase satur dažas noderīgas dalībnieku funkcijas darbam ar bitkopas objektiem. Šeit ir saraksts ar dažām std::bitset dalībnieku funkcijām:
Funkcijas nosaukums | Funkcijas apraksts |
|---|---|
set() | Iestatiet bitu vērtība pie dotā indeksa uz 1 . |
atiestatīt () | Iestatiet bitu vērtība noteiktā indeksā uz 0 . |
apgriezt () bin uz bcd | Pagrieziet bitu vērtību pie dotā indeksa. |
skaitīt () | Skaitīt skaits iestatīt bitus . |
pārbaude() | Atgriež Būla vērtība pie dotā indeksa . |
jebkurš () | Pārbauda, vai jebkura mazliet ir komplekts . |
neviens () | Pārbauda, vai neviens mazliet ir komplekts. |
viss () | Pārbaudiet, vai visi mazliet ir komplekts. |
Izmērs() | Atgriež bitkopas lielums. |
to_string() | Pārvērš bitkopa uz std::string. |
sekot() | Pārvērš bitkopa uz neparakstītu garu. |
to_ullong() | Pārvērš bitset uz neparakstītu long long. |
Piemērs:
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; }> Izvade
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>
Piezīme: Boolalpha tiek izmantots, lai drukātu patiesu un nepatiesu, nevis 1 vai 0 Būla vērtībām un noboolalpha pretējai.
std::bitset Operatori
Daži pamata operatori ir pārslogoti, lai strādātu ar bitkopas objektiem. Šis ir šo operatoru saraksts:
Operators | Darbība |
|---|---|
[] | Piekļuve operators |
& pitonu šķirošanas korteži | Bitu veidā UN |
| | Bitu veidā VAI |
! | Bitu veidā BEZMAKSAS |
>>= | Binārs Labā maiņa un piešķirt |
<<= | Binārs Kreisā maiņa un piešķirt |
&= | Piešķiriet bitu vērtību UN uz pirmo bitu kopu. |
|= šķēle java masīvu | Piešķiriet bitu vērtību VAI uz pirmo bitu kopu. |
^= | Piešķiriet bitu vērtību BEZMAKSAS uz pirmo bitu kopu. |
~ | Bitu veidā NAV |
Piemērs:
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;>
Izvade
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>
Atšķirība starp std::bitset un std::vector un bool masīvu
Bool vektoru un būtības masīvu var arī ieviest, lai saglabātu Būla vērtību secību, piemēram, bitkopu, taču pastāv dažas atšķirības starp katru ieviešanu:
| Parametrs | bitkopa | bula vektors | masīvs bool |
|---|---|---|---|
| Definīcija | Klases veidne, kas sastāv no bitu secības, kas saglabāta tā, ka katrs bits aizņem 1 bitu atmiņas. | C++ STL vektoru variants, kurā katrs elements ir 1 bita lielums un ir bool tipa | Fiksēta lieluma blakus esoša būtības datu elementu kolekcija. |
| Izmērs | Fiksēts izmērs. | Dinamiskais izmērs. | Fiksēts izmērs. |
| Atmiņa | Viens elements aizņem 1 bitu atmiņas. | Viens elements aizņem 1 bitu atmiņas. | Viens elements aizņem 1 baitu atmiņas. |
| Ātrums | Tas pats | Tas pats | Ātrāk |