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 sind0。

  • 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> bits1;               // Standardinitialisierung: 00000000
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

std::bitset<8> bits("00001111");
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::bitset<8> bits("10101010");
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

std::bitset<8> bits("10101010");
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> bits1("10101010");
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 <iostream>
#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 <iostream>
#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 <iostream>
#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 überschreitetunsigned 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>。

Weitere Erweiterungen