std::bitset
| 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 |
(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
|
(C++11)
|
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 |