Bitová množina je pole boolov, ale každá boolovská hodnota nie je uložená v samostatnom byte, bitová množina optimalizuje priestor tak, že každá booleovská hodnota zaberá iba 1-bitový priestor , takže priestor zaberaný bitovou množinou je menší ako priestor poľa bool alebo vektora bool .
Obmedzením bitsetu je to veľkosť musí byť známa v čase kompilácie, t.j. veľkosť bitovej sady je pevná.
std::bitset je šablóna triedy pre bitovú množinu, ktorá je definovaná vo vnútri hlavičkový súbor takže pred použitím bitsetu v našom programe musíme zahrnúť hlavičkový súbor.
Syntax:
bitset variable_name(initialization);>
Bitset môžeme inicializovať tromi spôsobmi:
1. Neinicializované: Všetky bity budú nastavené na nulu.
bitset variable_name;>
2. Inicializácia s desiatkovým celým číslom: Bitset bude reprezentovať dané desiatkové číslo v binárnom tvare.
previesť celé číslo na reťazec java
bitset variable_name(DECIMAL_NUMBER);>
3. Inicializácia pomocou binárneho reťazca: Bitset bude reprezentovať daný binárny reťazec.
bitset variable_name(string('BINARY_STRING')); bitset variable_name('BINARY_STRING');>Príklad:
C++ // C++ program to demonstrate the bitset #include #include using namespace std; int main() { // declaring an uninitialized bitset object bitset<8>uninicializedBitset; // inicializácia bitovou sadou desatinných čísel<8>decimalBitset(15); // inicializácia s bitovou sadou binárnych reťazcov<8>stringBitset(string('1111')); cout<< 'Uninitialized bitset: ' << uninitializedBitset << endl; cout << 'Initialized with decimal: ' << decimalBitset << endl; cout << 'Initialized with string: ' << stringBitset << endl; return 0; }> Výkon
Uninitialized bitset: 00000000 Initialized with decimal: 00001111 Initialized with string: 00001111>
std::bitset členské funkcie
Trieda std::bitset obsahuje niektoré užitočné členské funkcie na prácu s objektmi bitset. Tu je zoznam niektorých členských funkcií std::bitset:
vymazať posledný commit git
Názov funkcie | Popis funkcie |
|---|---|
set() | Nastaviť bitová hodnota pri danom indexe do 1 . |
reset() | Nastaviť bitová hodnota pri danom indexe na 0 . |
prevrátiť () | Otočte hodnotu bitu pri danom indexe. |
počítať () | počítať počet nastaviť bity . |
test() | Vráti boolovská hodnota pri danom indexe . |
akýkoľvek() | Kontroluje, či akýkoľvek bit je nastaviť . |
žiadny() listnode java | Kontroluje, či žiadny bit je nastaviť. |
všetko() | Skontrolujte, či všetky bit je nastaviť. |
veľkosť () | Vráti veľkosť bitsetu. |
natiahnuť() | Konvertuje bitset na std::string. |
nasledovať() | Konvertuje bitset na unsigned long. |
to_ullong() | Konvertuje bitset na unsigned long long. |
Príklad:
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; }> Výkon
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>
Poznámka: boolalpha sa používa na tlač true a false namiesto 1 alebo 0 pre boolovské hodnoty a noboolalpha pre opačné.
Operátori std::bitset
Niektoré zo základných operátorov sú pre prácu s bitsetovými objektmi preťažené. Nasleduje zoznam týchto operátorov:
Operátor | Prevádzka |
|---|---|
[] | Prístup operátor |
& | Bitovo A |
| | Bitovo ALEBO |
! tcp ip model | Bitovo ZADARMO |
>>= | Binárne Pravý posun a priradiť |
<<= | Binárne Lavy shift a priradiť |
&= | Priraďte hodnotu bitovej hodnoty A do prvého bitsetu. |
|= | Priraďte hodnotu bitovej hodnoty ALEBO do prvého bitsetu. |
^= | Priraďte hodnotu bitovej hodnoty ZADARMO do prvého bitsetu. |
~ | Bitovo NIE |
Príklad:
jfx java tutoriálC++
// 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;>
Výkon
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>
Rozdiel medzi std::bitset a std::vector a poľom bool
Vektor bool a pole bool možno implementovať aj na ukladanie sekvencie boolovských hodnôt, ako je bitová množina, ale medzi každou implementáciou sú určité rozdiely:
| Parameter | bitset | vektor bool | pole bool |
|---|---|---|---|
| Definícia | Šablóna triedy pozostávajúca zo sekvencie bitov uložených tak, že každý bit zaberá 1 bit pamäte. | Variácia vektorov C++ STL, v ktorej má každý prvok veľkosť 1 bit a je typu bool | Súvislá kolekcia boolových dátových prvkov s pevnou veľkosťou. |
| Veľkosť | Pevná veľkosť. | Dynamická veľkosť. | Pevná veľkosť. |
| Pamäť | Jeden prvok zaberá 1 bit pamäte. | Jeden prvok zaberá 1 bit pamäte. | Jeden prvok zaberá 1 bajt pamäte. |
| Rýchlosť | To isté | To isté | Rýchlejšie |