Namensräume
Varianten
Aktionen

std::bitset

Von cppreference.com
< cpp‎ | utility
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Funktionsobjekte
Bit-Manipulation (C++20)
bitset
(C++11)
Relationale Operatoren (in C++20 veraltet)
 
 
Definiert in der Header-Datei <bitset>
template< std::size_t N >
class bitset;

Die Klassenschablone bitset repräsentiert eine feste Sequenz von N Bits. Bitsets können mit Standard-Logikoperatoren manipuliert und in und aus Zeichenketten und ganzen Zahlen konvertiert werden. Für die Zwecke der Zeichenkettenrepräsentation und der Benennung von Richtungen für Schiebeoperationen wird die Sequenz so betrachtet, als ob ihre Elemente mit dem niedrigsten Index sich rechts befinden, wie in der Binärdarstellung von ganzen Zahlen.

bitset erfüllt die Anforderungen an CopyConstructible und CopyAssignable.

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

(seit C++23)

Inhalt

[edit] Template-Parameter

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

[edit] Membertypen

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

[edit] Memberfunktionen

konstruiert das Bitset
(public member function) [edit]
(in C++20 entfernt)
vergleicht den Inhalt
(public member function) [edit]
Elementzugriff
greift auf ein bestimmtes Bit zu
(public member function) [edit]
greift auf ein bestimmtes Bit zu
(public member function) [edit]
prüft, ob alle, einige oder keine der Bits auf true gesetzt sind
(public member function) [edit]
gibt die Anzahl der auf true gesetzten Bits zurück
(public member function) [edit]
Kapazität
gibt die Anzahl der Bits zurück, die das Bitset enthält
(public member function) [edit]
Modifizierer
führt binäre AND-, OR-, XOR- und NOT-Operationen durch
(public member function) [edit]
führt binäre Links- und Rechtsschiebeoperationen durch
(public member function) [edit]
setzt Bits auf true oder auf einen gegebenen Wert
(public member function) [edit]
setzt Bits auf false
(public member function) [edit]
vertauscht die Werte von Bits
(public member function) [edit]
Konvertierungen
gibt eine Zeichenkettenrepräsentation der Daten zurück
(public member function) [edit]
gibt eine unsigned long-Ganzzahlrepräsentation der Daten zurück
(public member function) [edit]
(C++11)
gibt eine unsigned long long-Ganzzahlrepräsentation der Daten zurück
(public member function) [edit]

[edit] Nicht-Memberfunktionen

führt binäre Logikoperationen auf Bitsets durch
(function template) [edit]
führt Stream-Ein- und -Ausgabe von Bitsets durch
(function template) [edit]

[edit] Hilfsklassen

Hash-Unterstützung für std::bitset
(Klassentemplate-Spezialisierung) [bearbeiten]

[edit] Hinweise

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

Feature-Test-Makro Wert Std Feature
__cpp_lib_constexpr_bitset 202207L (C++23) Ein constexpr-fähigeres std::bitset
__cpp_lib_bitset 202306L (C++26) Schnittstellen von std::bitset mit std::string_view

[edit] Beispiel

#include <bitset>
#include <cassert>
#include <cstddef>
#include <iostream>
 
int main()
{
    typedef std::size_t length_t, position_t; // the hints
 
    // constructors:
    constexpr std::bitset<4> b1;
    constexpr std::bitset<4> b2{0xA}; // == 0B1010
    std::bitset<4> b3{"0011"}; // can also be constexpr since C++23
    std::bitset<8> b4{"ABBA", length_t(4), /*0:*/'A', /*1:*/'B'}; // == 0B0000'0110
 
    // bitsets can be printed out to a stream:
    std::cout << "b1:" << b1 << "; b2:" << b2 << "; b3:" << b3 << "; b4:" << b4 << '\n';
 
    // bitset supports bitwise operations:
    b3 |= 0b0100; assert(b3 == 0b0111);
    b3 &= 0b0011; assert(b3 == 0b0011);
    b3 ^= std::bitset<4>{0b1100}; assert(b3 == 0b1111);
 
    // operations on the whole set:
    b3.reset(); assert(b3 == 0);
    b3.set(); assert(b3 == 0b1111);
    assert(b3.all() && b3.any() && !b3.none());
    b3.flip(); assert(b3 == 0);
 
    // operations on individual 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);
 
    // subscript operator[] is supported:
    b3[2] = true; assert(true == b3[2]);
 
    // other operations:
    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

[edit] Siehe auch

speichereffizientes dynamisches Bitset
(class template specialization) [edit]
Bitmanipulation (C++20) Dienstprogramme zum Zugriff, zur Manipulation und zur Verarbeitung einzelner Bits und Bitsequenzen