Namespaces
Variants

std:: bitset

From cppreference.net
Utilities library
Défini dans l'en-tête <bitset>
template < std:: size_t N >
class bitset ;

Le modèle de classe bitset représente une séquence de taille fixe de N bits. Les bitsets peuvent être manipulés par des opérateurs logiques standards et convertis vers et depuis des chaînes de caractères et des entiers. Pour les besoins de la représentation sous forme de chaîne et de la désignation des directions pour les opérations de décalage, la séquence est considérée comme ayant ses éléments d'indice le plus faible à droite , comme dans la représentation binaire des entiers.

bitset satisfait aux exigences de CopyConstructible et CopyAssignable .

Toutes les fonctions membres de std::bitset sont constexpr : il est possible de créer et d'utiliser des objets std::bitset dans l'évaluation d'une expression constante.

(depuis C++23)

Table des matières

Paramètres du modèle

N - le nombre de bits à allouer pour le stockage

Types membres

classe proxy représentant une référence à un bit
(classe)

Fonctions membres

construit le bitset
(fonction membre publique)
(supprimé en C++20)
compare le contenu
(fonction membre publique)
Accès aux éléments
accède à un bit spécifique
(fonction membre publique)
accède à un bit spécifique
(fonction membre publique)
vérifie si tous, certains ou aucun des bits sont définis à true
(fonction membre publique)
retourne le nombre de bits définis à true
(fonction membre publique)
Capacité
retourne le nombre de bits que le bitset contient
(fonction membre publique)
Modificateurs
effectue les opérations binaires ET, OU, XOR et NON
(fonction membre publique)
effectue les décalages binaires à gauche et à droite
(fonction membre publique)
définit les bits à true ou à une valeur donnée
(fonction membre publique)
définit les bits à false
(fonction membre publique)
bascule les valeurs des bits
(fonction membre publique)
Conversions
retourne une représentation sous forme de chaîne des données
(fonction membre publique)
retourne une représentation unsigned long des données
(fonction membre publique)
(C++11)
retourne une représentation unsigned long long des données
(fonction membre publique)

Fonctions non membres

effectue des opérations logiques binaires sur les bitsets
(modèle de fonction)
effectue l'entrée et la sortie en flux des bitsets
(modèle de fonction)

Classes d'assistance

Prise en charge du hachage pour std::bitset
(spécialisation de modèle de classe)

Notes

Si la taille d'un ensemble de bits n'est pas connue à la compilation, ou s'il est nécessaire de modifier sa taille à l'exécution, les types dynamiques tels que std::vector<bool> ou boost::dynamic_bitset<> peuvent être utilisés à la place.

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_constexpr_bitset 202207L (C++23) Un std::bitset plus constexpr
__cpp_lib_bitset 202306L (C++26) Interface entre std::bitset et std::string_view

Exemple

#include <bitset>
#include <cassert>
#include <cstddef>
#include <iostream>
int main()
{
    typedef std::size_t length_t, position_t; // les indices
    // constructeurs :
    constexpr std::bitset<4> b1;
    constexpr std::bitset<4> b2{0xA}; // == 0B1010
    std::bitset<4> b3{"0011"}; // peut aussi être constexpr depuis C++23
    std::bitset<8> b4{"ABBA", length_t(4), /*0:*/'A', /*1:*/'B'}; // == 0B0000'0110
    // les bitsets peuvent être affichés sur un flux :
    std::cout << "b1:" << b1 << "; b2:" << b2 << "; b3:" << b3 << "; b4:" << b4 << '\n';
    // le bitset supporte les opérations bit à bit :
    b3 |= 0b0100; assert(b3 == 0b0111);
    b3 &= 0b0011; assert(b3 == 0b0011);
    b3 ^= std::bitset<4>{0b1100}; assert(b3 == 0b1111);
    // opérations sur l'ensemble :
    b3.reset(); assert(b3 == 0);
    b3.set(); assert(b3 == 0b1111);
    assert(b3.all() && b3.any() && !b3.none());
    b3.flip(); assert(b3 == 0);
    // opérations sur les bits individuels :
    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);
    // l'opérateur d'indice [] est supporté :
    b3[2] = true; assert(true == b3[2]);
    // autres opérations :
    assert(b3.count() == 1);
    assert(b3.size() == 4);
    assert(b3.to_ullong() == 0b0100ULL);
    assert(b3.to_string() == "0100");
}

Sortie :

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

Voir aussi

bitset dynamique économe en espace
(spécialisation de modèle de classe)
Bit manipulation (C++20) utilitaires pour accéder, manipuler et traiter des bits individuels et des séquences de bits