logo

Bitová sada C++ a jej aplikácia

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ál
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;>


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 boolSú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