logo

C++ bitkopa un tās pielietojums

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 tipaFiksē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 patsTas patsĀtrāk