Bitová sada C++ a její aplikace

Bitová sada je pole boolů, ale každá booleovská hodnota není místo toho uložena v samostatném bajtu, bitová sada optimalizuje prostor tak, aby každá booleovská hodnota zabírá pouze 1bitový prostor , tak prostor zabraný bitovou sadou je menší než u pole bool nebo vektoru bool .

Omezení bitsetu je to velikost musí být známa v době kompilace, tj. velikost bitové sady je pevná.

std::bitset je šablona třídy pro bitovou sadu, která je definována uvnitř hlavičkový soubor takže před použitím bitset v našem programu musíme zahrnout hlavičkový soubor.

Syntax:

bitset variable_name(initialization); 

Bitset můžeme inicializovat třemi způsoby:

1. Neinicializováno: Všechny bity budou nastaveny na nulu.

bitset variable_name; 

2. Inicializace s dekadickým celým číslem: Bitset bude reprezentovat dané dekadické číslo v binární podobě.

bitset variable_name(DECIMAL_NUMBER); 

3. Inicializace pomocí binárního řetězce: Bitset bude reprezentovat daný binární řetězec.

bitset variable_name(string('BINARY_STRING')); bitset variable_name('BINARY_STRING'); 

Příklad:

C++
// C++ program to demonstrate the bitset  #include  #include  using namespace std; int main() {  // declaring an uninitialized bitset object  bitset <8>neinicializovanáBitset;  // inicializace s bitovou sadou desetinných čísel <8>decimalBitset(15);  // inicializace pomocí bitové sady binárních řetězců <8>stringBitset(string('1111'));  cout < < 'Uninitialized bitset: '  < < uninitializedBitset   < < endl;  cout  < < 'Initialized with decimal: '  < < decimalBitset   < < endl;  cout  < < 'Initialized with string: '  < < stringBitset   < < endl;  return 0; } 

Výstup
Uninitialized bitset: 00000000 Initialized with decimal: 00001111 Initialized with string: 00001111 

std::bitset členské funkce

Třída std::bitset obsahuje některé užitečné členské funkce pro práci s objekty bitset. Zde je seznam některých členských funkcí std::bitset:

Název funkce

Popis funkce

soubor()

Nastav bitovou hodnotu na daném indexu do 1 .

reset()

Nastav bitovou hodnotu na daném indexu na 0 .

převrátit ()

Překlopte hodnotu bitu na daném indexu.

počet()

Počet počet nastavit bity .

test()

Vrátí booleovská hodnota na daném indexu .

žádný()

Kontroluje, zda žádný bit je soubor .

žádný()

Kontroluje, zda žádný bit je soubor.

Všechno()

Zkontrolujte, zda Všechno bit je soubor.

velikost()

Vrátí velikost bitsetu.

to_string()

Převádí bitset na std::string.

následovat()

Převádí bitset na unsigned long.

to_ullong()

Převádí bitset na unsigned long long.

Pří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ýstup
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 se používá k tisku true a false místo 1 nebo 0 pro booleovské hodnoty a noboolalpha pro opačné hodnoty.

std::bitset Operátoři

Některé ze základních operátorů jsou přetížené pro práci s objekty bitset. Níže je uveden seznam těchto operátorů:

Operátor

Úkon

[]

Přístup operátor

&

bitový A

|

bitový NEBO

!

bitový VOLNÝ, UVOLNIT

>>=

Binární Pravý posun a přiřadit

< <=

Binární Levý Shift a přiřadit

&=

Přiřaďte hodnotu bitově A do prvního bitsetu.

|=

Přiřaďte hodnotu bitově NEBO do prvního bitsetu.

^=

Přiřaďte hodnotu bitově VOLNÝ, UVOLNIT do prvního bitsetu.

~

bitový NE

Příklad:

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ýstup

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 

Rozdíl mezi std::bitset a std::vector a polem bool

Vektor bool a pole bool lze také implementovat pro uložení sekvence booleovských hodnot, jako je bitset, ale mezi každou implementací existují určité rozdíly:

Parametr

bitset

vektor bool

pole bool

Definice Šablona třídy sestávající ze sekvence bitů uložených tak, že každý bit zabírá 1 bit paměti. Variace vektorů C++ STL, ve kterých má každý prvek velikost 1 bit a je typu bool Souvislá kolekce boolových datových prvků s pevnou velikostí.
Velikost Pevná velikost. Dynamická velikost. Pevná velikost.
Paměť Jeden prvek zabírá 1 bit paměti. Jeden prvek zabírá 1 bit paměti. Jeden prvek zabírá 1 bajt paměti.
Rychlost Stejný Stejný Rychleji