Namespaces
Variants

std:: bitset

From cppreference.net
Utilities library
Definiert in Header <bitset>
template < std:: size_t N >
class bitset ;

Die Klassenvorlage bitset repräsentiert eine feste Sequenz von N Bits. Bitsets können mit standardmäßigen logischen Operatoren manipuliert und in Zeichenketten und Ganzzahlen konvertiert werden. Für die Zwecke der Zeichenketten-Darstellung und der Benennung von Richtungen für Schiebeoperationen wird die Sequenz so betrachtet, dass sich ihre niedrigstindizierten Elemente rechts befinden, wie in der binären Darstellung von Ganzzahlen.

bitset erfüllt die Anforderungen von CopyConstructible und CopyAssignable .

Alle Memberfunktionen von std::bitset sind constexpr : Es ist möglich, std::bitset -Objekte in der Auswertung eines konstanten Ausdrucks zu erstellen und zu verwenden.

(seit C++23)

Inhaltsverzeichnis

Template-Parameter

N - die Anzahl der Bits, für die Speicherplatz reserviert werden soll

Mitgliedertypen

Proxy-Klasse, die eine Referenz auf ein Bit repräsentiert
(Klasse)

Memberfunktionen

Konstruiert das Bitset
(öffentliche Elementfunktion)
(entfernt in C++20)
vergleicht die Inhalte
(öffentliche Elementfunktion)
Elementzugriff
greift auf bestimmtes Bit zu
(öffentliche Elementfunktion)
greift auf bestimmtes Bit zu
(öffentliche Elementfunktion)
prüft ob alle, mindestens eines oder keine Bits auf true gesetzt sind
(öffentliche Elementfunktion)
gibt die Anzahl der auf true gesetzten Bits zurück
(öffentliche Elementfunktion)
Kapazität
gibt die Anzahl der Bits zurück, die das Bitset enthält
(öffentliche Elementfunktion)
Modifikatoren
führt binäres AND, OR, XOR und NOT aus
(öffentliche Elementfunktion)
führt binäre Links- und Rechtsschiebeoperationen aus
(öffentliche Elementfunktion)
setzt Bits auf true oder gegebenen Wert
(öffentliche Elementfunktion)
setzt Bits auf false
(öffentliche Elementfunktion)
wechselt die Werte der Bits
(öffentliche Elementfunktion)
Konvertierungen
gibt eine String-Darstellung der Daten zurück
(öffentliche Elementfunktion)
gibt eine unsigned long Integer-Darstellung der Daten zurück
(öffentliche Elementfunktion)
(C++11)
gibt eine unsigned long long Integer-Darstellung der Daten zurück
(öffentliche Elementfunktion)

Nicht-Member-Funktionen

führt binäre logische Operationen auf Bitsets aus
(Funktions-Template)
führt Strom-Ein- und Ausgabe von Bitsets durch
(Funktions-Template)

Hilfsklassen

Hash-Unterstützung für std::bitset
(Klassen-Template-Spezialisierung)

Hinweise

Wenn die Größe eines Bit-Sets zur Kompilierzeit nicht bekannt ist oder es notwendig ist, seine Größe zur Laufzeit zu ändern, können dynamische Typen wie std::vector<bool> oder boost::dynamic_bitset<> stattdessen verwendet werden.

Feature-Test Makro Wert Std Funktion
__cpp_lib_constexpr_bitset 202207L (C++23) Ein stärker constexpr std::bitset
__cpp_lib_bitset 202306L (C++26) Schnittstelle für std::bitset mit std::string_view

Beispiel

#include <bitset>
#include <cassert>
#include <cstddef>
#include <iostream>
int main()
{
    typedef std::size_t length_t, position_t; // die Hinweise
    // Konstruktoren:
    constexpr std::bitset<4> b1;
    constexpr std::bitset<4> b2{0xA}; // == 0B1010
    std::bitset<4> b3{"0011"}; // kann auch constexpr seit C++23 sein
    std::bitset<8> b4{"ABBA", length_t(4), /*0:*/'A', /*1:*/'B'}; // == 0B0000'0110
    // Bitsets können in einen Stream ausgegeben werden:
    std::cout << "b1:" << b1 << "; b2:" << b2 << "; b3:" << b3 << "; b4:" << b4 << '\n';
    // Bitset unterstützt bitweise Operationen:
    b3 |= 0b0100; assert(b3 == 0b0111);
    b3 &= 0b0011; assert(b3 == 0b0011);
    b3 ^= std::bitset<4>{0b1100}; assert(b3 == 0b1111);
    // Operationen auf der gesamten Menge:
    b3.reset(); assert(b3 == 0);
    b3.set(); assert(b3 == 0b1111);
    assert(b3.all() && b3.any() && !b3.none());
    b3.flip(); assert(b3 == 0);
    // Operationen auf einzelnen Bits:
    b3.set(position_t(1), true); assert(b3 == 0b0010);
    b3.set(position_t(1), false); assert(b3 == 0);
    b3.flip(position_t(2)); assert(b3 == 0b0100);
    b3.reset(position_t(2)); assert(b3 == 0);
    // Indexoperator [] wird unterstützt:
    b3[2] = true; assert(true == b3[2]);
    // andere Operationen:
    assert(b3.count() == 1);
    assert(b3.size() == 4);
    assert(b3.to_ullong() == 0b0100ULL);
    assert(b3.to_string() == "0100");
}

Ausgabe:

b1:0000; b2:1010; b3:0011; b4:00000110

Siehe auch

platzsparende dynamische Bitmenge
(Klassen-Template-Spezialisierung)
Bit manipulation (C++20) Hilfsmittel zum Zugriff, zur Manipulation und Verarbeitung einzelner Bits und Bitsequenzen