Ein Bitset ist ein Array von Bool-Werten, aber jeder boolesche Wert wird nicht in einem separaten Byte gespeichert, sondern Bitset optimiert den Speicherplatz so Jeder boolesche Wert benötigt nur 1-Bit-Speicherplatz , Also Der vom Bitset beanspruchte Platz ist kleiner als der eines Arrays mit Bool-Werten oder eines Vektors mit Bool-Werten .
Eine Einschränkung des Bitsatzes besteht darin Die Größe muss zur Kompilierungszeit bekannt sein, d. h. die Größe des Bitsatzes ist festgelegt.
std::bitset ist die darin definierte Klassenvorlage für Bitset Header-Datei Daher müssen wir die Header-Datei einbinden, bevor wir Bitset in unserem Programm verwenden können.
Syntax:
bitset variable_name(initialization);>
Wir können Bitset auf drei Arten initialisieren:
1. Nicht initialisiert: Alle Bits werden auf Null gesetzt.
bitset variable_name;>
2. Initialisierung mit dezimaler Ganzzahl: Bitset stellt die angegebene Dezimalzahl in binärer Form dar.
bitset variable_name(DECIMAL_NUMBER);>
3. Initialisierung mit Binärstring: Bitset repräsentiert die angegebene Binärzeichenfolge.
bitset variable_name(string('BINARY_STRING')); bitset variable_name('BINARY_STRING');>Beispiel:
C++ // C++ program to demonstrate the bitset #include #include using namespace std; int main() { // declaring an uninitialized bitset object bitset<8>uninitializedBitset; // Initialisierung mit Dezimalzahl-Bitset<8>decimalBitset(15); // Initialisierung mit binärem String-Bitset<8>stringBitset(string('1111')); cout<< 'Uninitialized bitset: ' << uninitializedBitset << endl; cout << 'Initialized with decimal: ' << decimalBitset << endl; cout << 'Initialized with string: ' << stringBitset << endl; return 0; }> Ausgabe
Uninitialized bitset: 00000000 Initialized with decimal: 00001111 Initialized with string: 00001111>
std::bitset-Mitgliedsfunktionen
Die Klasse std::bitset enthält einige nützliche Mitgliedsfunktionen für die Arbeit an den Bitset-Objekten. Hier ist die Liste einiger Mitgliedsfunktionen von std::bitset:
Funktionsname | Bedienungsanleitung char zu string java |
|---|---|
Satz() | Stellen Sie die ein Bitwert am angegebenen Index bis 1 . |
zurücksetzen() | Stellen Sie die ein Bitwert bei einem gegebenen Index auf 0 . |
flip() | Kehren Sie den Bitwert um am angegebenen Index. |
zählen() | Zählen die Anzahl der Bits setzen . |
prüfen() | Gibt die zurück boolescher Wert am angegebenen Index . |
beliebig() | Überprüft, ob beliebig Bit ist Satz . |
keiner() | Überprüft, ob keiner Bit ist Satz. |
alle() | Überprüfen Sie, ob alle Bit ist Satz. |
Größe() | Gibt die zurück Größe des Bitsatzes. |
to_string() | Konvertiert Bitset auf std::string. |
Folgen() | Konvertiert Bitsatz auf unsigned long. |
to_ullong() | Konvertiert Bitsatz auf unsigned long long. |
Beispiel:
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; }> Ausgabe
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>
Notiz: boolalpha wird verwendet, um true und false anstelle von 1 oder 0 für boolesche Werte und noboolalpha für das Gegenteil auszugeben.
std::bitset-Operatoren
Einige der Grundoperatoren sind für die Arbeit mit Bitset-Objekten überladen. Nachfolgend finden Sie die Liste dieser Operatoren:
Operator | Betrieb |
|---|---|
[] | Zugang Operator |
& | Bitweise UND |
| | Bitweise ODER |
! | Bitweise FREI |
>>= Ein Beispiel für ein Open-Source-Betriebssystem ist | Binär Rechte Shifttaste und zuordnen |
<<= | Binär Linksverschiebung und zuordnen |
&= | Weisen Sie den Wert bitweise zu UND zum ersten Bitsatz. |
|= | Weisen Sie den Wert bitweise zu ODER zum ersten Bitsatz. |
^= | Weisen Sie den Wert bitweise zu FREI zum ersten Bitsatz. |
~ | Bitweise NICHT |
Beispiel:
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;>
Ausgabe
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>
Unterschied zwischen std::bitset und std::vector und einem Array von Bool
Vector of Bool und Array of Bool können ebenfalls implementiert werden, um eine Folge boolescher Werte wie Bitset zu speichern, es gibt jedoch einige Unterschiede zwischen den einzelnen Implementierungen:
| Parameter | Bitsatz | Vektor von Bool | Array von Bool |
|---|---|---|---|
| Definition | Eine Klassenvorlage, die aus einer Folge von Bits besteht, die so gespeichert sind, dass jedes Bit 1 Bit Speicher belegt. | Eine Variation von Vektoren von C++ STL, in der jedes Element eine Größe von 1 Bit und den Typ bool hat | Eine zusammenhängende Sammlung fester Größe boolescher Datenelemente. |
| Größe | Feste Größe. | Dynamische Größe. | Feste Größe. |
| Erinnerung | Ein einzelnes Element belegt 1 Bit Speicher. | Ein einzelnes Element belegt 1 Bit Speicher. | Ein einzelnes Element belegt 1 Byte Speicher. |
| Geschwindigkeit | Dasselbe | Dasselbe | Schneller |