Namespaces
Variants

std::bitset

Depuis fr.cppreference.net
 
 
Bibliothèque d'utilitaires
Support du langage
Support de type (types de base, RTTI)
Macros de test de fonctionnalités de la bibliothèque (C++20)
Utilitaires de programme
Fonctions variadiques
Support des coroutines (C++20)
Support des contrats (C++26)
Comparaison à trois voies
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilitaires généraux
Opérateurs relationnels (obsolète en C++20)
 
 
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 les opérateurs logiques standards et convertis en et à partir de chaînes de caractères et d'entiers. Pour la représentation sous forme de chaîne et pour nommer les directions des opérations de décalage, la séquence est considérée comme ayant ses éléments les plus bas indexés à droite, comme dans la représentation binaire des entiers.

bitset répond aux exigences de CopyConstructible et de CopyAssignable.

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

(depuis C++23)

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