Namespaces
Variants

std::bitset

Von de.cppreference.net
 
 
Hilfsbibliothek
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programmhilfsmittel
Ellipsenfunktionen
Koroutinen-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Dreifach-Vergleich
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Vergleichsoperatoren (veraltet in C++20)
Ganzzahl-Vergleichsfunktionen
(C++20)(C++20)(C++20)    
(C++20)
Swap und Typoperationen
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Gebräuchliche Vokabeltypen
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
Definiert in Header <bitset>
template< std::size_t N >
class bitset;

Die Klasse bitset stellt eine Sequenz fester Größe von N Bits dar. Bitmengen können mit den üblichen logischen Operatoren manipuliert und in Zeichenketten und Ganzzahlen umgewandelt werden. Für die Darstellung als Zeichenkette und die Namensgebung der Richtungen von Schiebeoperationen wird angenommen, dass die Sequenz ihre niedrigsten Indizes auf der rechten Seite hat, wie in der binären Darstellung von Ganzzahlen.

bitset erfüllt die Anforderungen von CopyConstructible und CopyAssignable.

Alle Member-Funktionen 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)

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