C++-Standardbibliothek<bitset>
In der C++-Programmierung,<bitset>Es ist Teil der Standardbibliothek und bietet eine Möglichkeit, Bitsets fester Größe zu manipulieren.
Ein Bitset ist ein Array, das aus Bits besteht, wobei jedes Bit 0 oder 1 sein kann.
<bitset>Es bietet eine effiziente Möglichkeit, binäre Daten zu speichern und zu manipulieren, und eignet sich besonders für Szenarien, die Operationen auf Bit-Ebene erfordern, wie Flag-Verwaltung, Bitmaskenoperationen usw.
bitsetEs ist eine Template-Klasse, deren Template-Parameter die Größe des Bitsets definiert. Zum Beispiel:bitset<32>es stellt ein Bitset dar, das 32 Bits enthält.
Syntax
Das Folgende verwendetbitsetGrundlegende Syntax:
#include <bitset> // 声明一个大小为N的bitset std::bitset<N> b; // 初始化bitset b = std::bitset<N>(value); // 访问位集合中的单个位 bool bit = b[i];
Grundlegende Verwendung von std::bitset
std::bitset ist eine Template-Klasse, die verwendet wird, um eine Binärbitfolge fester Größe darzustellen. Ihr Template-Parameter ist die Anzahl der Bits (N), die die Länge der Binärfolge angibt.
std::bitset definieren:
std::bitset<8> bits; // 定义一个 8 位的二进制序列
std::bitset initialisieren:
Standardinitialisierung: Alle Bits sind
0。Initialisierung aus einer Ganzzahl: wandelt die Ganzzahl in Binär um.
Initialisierung aus einer Zeichenkette: parst die Zeichenkette als Binärfolge.
Beispiel
std::bitset<8> bits2(42); // Initialisierung aus Ganzzahl: 00101010
std::bitset<8> bits3("10101010"); // Aus Zeichenkette initialisieren: 10101010
Übliche Memberfunktionen
std::bitset bietet umfangreiche Memberfunktionen zum Manipulieren binärer Bits.
Zugriff auf und Ändern von Bits:
operator[]: Auf ein bestimmtes Bit zugreifen oder es ändern.set(): Ein bestimmtes Bit oder alle Bits auf einen Wert setzen1。reset(): Ein bestimmtes Bit oder alle Bits auf einen Wert setzen0。flip(): Ein bestimmtes Bit oder alle Bits umkehren.
Beispiel
bits[0] = 1; // Bit 0 ändern: 00001111 -> 00001111
bits.set(4); // Bit 4 setzen: 00011111 -> 00011111
bits.reset(1); // Bit 1 zurücksetzen: 00011111 -> 00011101
bits.flip(); // Alle Bits umkehren: 00011101 -> 11100010
Abfragen von Bit-Informationen:
count(): gibt zurück1die Anzahl der.size(): gibt die Anzahl der Bits zurück.test(pos): Prüfen, ob ein bestimmtes Bit gesetzt ist1。all(): Prüfen, ob alle Bits gesetzt sind1。any(): Prüfen, ob irgendein Bit gesetzt ist1。none(): Prüfen, ob alle Bits gesetzt sind0。
Beispiel
std::cout << "Anzahl der Einsen: " << bits.count() << std::endl; // Ausgabe 4
std::cout << "Größe: " << bits.size() << std::endl; // Ausgabe 8
std::cout << "Ist Bit 3 gesetzt? " << bits.test(3) << std::endl; // Ausgabe 1 (wahr)
std::cout << "Alle Bits gesetzt? " << bits.all() << std::endl; // Ausgabe 0 (falsch)
In andere Typen konvertieren:
to_ulong(): bildet abstd::bitsetKonvertiert zuunsigned long。to_ullong(): bildet abstd::bitsetKonvertiert zuunsigned long long。to_string(): bildet abstd::bitsetIn String konvertieren.
Beispiel
unsigned long num = bits.to_ulong(); // In Integer konvertieren: 170
std::string str = bits.to_string(); // In String konvertieren: "10101010"
Bitweise Operationen
std::bitset unterstützt gängige Bitoperationen wie bitweises AND, bitweises OR, bitweises XOR und bitweises NOT.
&: bitweises AND|: bitweises ODER^: bitweises XOR~: bitweises NICHT
Beispiel
std::bitset<8> bits2("11110000");
std::bitset<8> result_and = bits1 & bits2; // Bitweises UND: 10100000
std::bitset<8> result_or = bits1 | bits2; // Bitweises ODER: 11111010
std::bitset<8> result_xor = bits1 ^ bits2; // Bitweises XOR: 01011010
std::bitset<8> result_not = ~bits1; // Bitweises NICHT: 01010101
Beispiel
Grundlegende Verwendung:
Beispiel
#include <bitset>
int main() {
std::bitset<8> b("11001010"); // Aus String initialisieren
std::cout << "Anfängliches Bitset: " << b << std::endl;
// Zugriff auf ein Bit an einer bestimmten Position
std::cout << "Bit an Position 3: " << b[3] << std::endl;
// Ein Bit ändern
b[3] = 1;
std::cout << "Geändertes Bitset: " << b << std::endl;
// Ein Bit umkehren
b.flip();
std::cout << "Umgekehrtes Bitset: " << b << std::endl;
return 0;
}
Ausgabeergebnis:
Initial bitset: 11001010 Bit at position 3: 0 Modified bitset: 11001011 Flipped bitset: 00110110
Bitweise Operationen:
Beispiel
#include <bitset>
int main() {
std::bitset<8> b1("10101010");
std::bitset<8> b2("11110000");
// Bitweise AND-Operation
std::bitset<8> b_and = b1 & b2;
std::cout << "Bitweise AND: " << b_and << std::endl;
// Bitweise OR-Operation
std::bitset<8> b_or = b1 | b2;
std::cout << "Bitweise OR: " << b_or << std::endl;
// Bitweise XOR-Operation
std::bitset<8> b_xor = b1 ^ b2;
std::cout << "Bitweise XOR: " << b_xor << std::endl;
// Bitweise NOT-Operation
std::bitset<8> b_not = ~b1;
std::cout << "Bitweises NICHT: " << b_not << std::endl;
return 0;
}
Ausgabeergebnis:
Bitwise AND: 10100000 Bitwise OR: 11111010 Bitwise XOR: 01111010 Bitwise NOT: 01010101
Über das Bitset iterieren:
Beispiel
#include <bitset>
int main() {
std::bitset<8> b("10101010");
// Über die Bits im Bitset iterieren
for (size_t i = 0; i < b.size(); ++i) {
std::cout << b[i];
}
std::cout << std::endl;
return 0;
}
Ausgabeergebnis:
10101010
bitsetist ein sehr nützliches Werkzeug in der C++-Standardbibliothek, das Programmierern ermöglicht, Daten auf Bit-Ebene intuitiv und effizient zu verarbeiten. Anhand der obigen Beispiele können wir sehen, wie man es deklariert, initialisiert, darauf zugreift, es ändert und Bitoperationen ausführt. Diese Funktionen sind sehr nützlich im Umgang mit Binärdaten oder Situationen, die eine Steuerung auf Bit-Ebene erfordern.
Hinweise
std::bitsetSeine Größe ist fest und wird zur Kompilierzeit bestimmt.Wenn die Anzahl der Bits überschreitet
unsigned longoderunsigned long longdie Anzahl der Bits,to_ulong()undto_ullong()wird auslösenstd::overflow_erroreine Ausnahme.std::bitsetEs unterstützt keine dynamische Größenänderung; wenn ein dynamisches Bitset benötigt wird, erwägen Siestd::vector<bool>。