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.
ciąg Java na liczbę całkowitą
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:
czytanie z pliku csv w Javie
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() zmienna globalna js | 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 |
| zmienna referencyjna w Javie | 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 usuń plik w Javie | 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 |