logo

C++ bitų rinkinys ir jo taikymas

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 tipoFiksuoto 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 patsTas patsGreičiau