Bitset C++ i jego zastosowanie

Bitset to tablica booli, ale każda wartość logiczna nie jest przechowywana w oddzielnym bajcie, bitset optymalizuje przestrzeń w taki sposób, że każda wartość logiczna zajmuje tylko 1-bitową przestrzeń , Więc miejsce zajmowane przez bitset jest mniejsze niż tablica bool lub wektor bool .

Ograniczeniem zestawu bitów jest to rozmiar musi być znany w czasie kompilacji, tj. rozmiar zestawu bitów jest stały.

std::bitset jest szablonem klasy dla zestawu bitów, który jest zdefiniowany wewnątrz plik nagłówkowy dlatego musimy dołączyć plik nagłówkowy przed użyciem bitsetu w naszym programie.

Składnia:

bitset variable_name(initialization); 

Bitset możemy zainicjować na trzy sposoby:

1. Niezainicjowane: Wszystkie bity zostaną ustawione na zero.

bitset variable_name; 

2. Inicjalizacja dziesiętną liczbą całkowitą: Bitset będzie reprezentował podaną liczbę dziesiętną w postaci binarnej.

bitset variable_name(DECIMAL_NUMBER); 

3. Inicjalizacja ciągiem binarnym: Bitset będzie reprezentował dany ciąg binarny.

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

Przykład:

C++
// C++ program to demonstrate the bitset  #include  #include  using namespace std; int main() {  // declaring an uninitialized bitset object  bitset <8>niezainicjowanyBitset;  // inicjalizacja z zestawem bitów liczb dziesiętnych <8>dziesiętnyBitset(15);  // inicjalizacja za pomocą bitsetu ciągu binarnego <8>stringBitset(string('1111'));  cout < < 'Uninitialized bitset: '  < < uninitializedBitset   < < endl;  cout  < < 'Initialized with decimal: '  < < decimalBitset   < < endl;  cout  < < 'Initialized with string: '  < < stringBitset   < < endl;  return 0; } 

Wyjście
Uninitialized bitset: 00000000 Initialized with decimal: 00001111 Initialized with string: 00001111 

std::bitset Funkcje członkowskie

Klasa std::bitset zawiera kilka przydatnych funkcji składowych do pracy na obiektach bitset. Oto lista niektórych funkcji składowych std::bitset:

Nazwa funkcji

Opis funkcji

ustawić()

Ustaw wartość bitowa przy danym indeksie do 1 .

Resetowanie()

Ustaw wartość bitowa przy danym indeksie do 0 .

trzepnięcie()

Odwróć wartość bitu przy danym indeksie.

liczyć()

Liczyć Liczba ustawić bity .

test()

Zwraca wartość logiczna przy danym indeksie .

każdy()

Sprawdza, czy każdy trochę jest ustawić .

nic()

Sprawdza, czy nic trochę jest ustawić.

Wszystko()

Sprawdź, czy Wszystko trochę jest ustawić.

rozmiar()

Zwraca rozmiar zestawu bitów.

to_string()

Nawraca bitset na std::string.

podążać()

Nawraca bitset na unsigned long.

to_ullong()

Nawraca bitset na unsigned long long.

Przykład:

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; } 

Wyjście
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 

Notatka: boolalpha służy do wypisywania prawdy i fałszu zamiast 1 lub 0 dla wartości logicznych i noboolalpha dla wartości przeciwnych.

Operatory std::bitset

Niektóre z podstawowych operatorów są przeciążone do pracy z obiektami bitsetowymi. Poniżej znajduje się lista tych operatorów:

Operator

Operacja

[]

Dostęp operator

&

Bitowe I

|

Bitowe LUB

!

Bitowe BEZPŁATNY

>>=

Dwójkowy Prawe przesunięcie i przypisz

< <=

Dwójkowy Przesunięcie w lewo i przypisz

&=

Przypisz wartość bitową I do pierwszego bitsetu.

|=

Przypisz wartość bitową LUB do pierwszego bitsetu.

^=

Przypisz wartość bitową BEZPŁATNY do pierwszego bitsetu.

~

Bitowe NIE

Przykład:

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; 


Wyjście

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 

Różnica między std::bitset i std::vector a tablicą bool

Wektor bool i tablica bool można również zaimplementować do przechowywania sekwencji wartości logicznych, takich jak bitset, ale istnieją pewne różnice między każdą implementacją:

Parametr

bitset

wektor boola

tablica bool

Definicja Szablon klasy składający się z sekwencji bitów przechowywanych w taki sposób, że każdy bit zajmuje 1 bit pamięci. Odmiana wektorów C++ STL, w której każdy element ma rozmiar 1 bita i jest typu bool Ciągła kolekcja elementów danych bool o stałym rozmiarze.
Rozmiar Stały rozmiar. Rozmiar dynamiczny. Stały rozmiar.
Pamięć Pojedynczy element zajmuje 1 bit pamięci. Pojedynczy element zajmuje 1 bit pamięci. Pojedynczy element zajmuje 1 bajt pamięci.
Prędkość To samo To samo Szybciej