Partager via


Champs de bits C++

Les classes et les structures peuvent contenir des membres qui occupent moins de stockage qu'un type intégral.Ces membres sont spécifiés comme des champs de bits.la syntaxe pour la spécification de membre- déclarateur de champ de bits suit :

declarator  : constant-expression

Notes

declarator (facultatif) est le nom par lequel le membre est accessible dans le programme.Ce doit être un type entier (types énumérés).l'expression constante spécifie le nombre de bits que le membre occupe dans la structure.Les champs de bits anonymes - c. autrement dit., les membres de champ de bits sans identificateur - peuvent être utilisés pour effectuer.

[!REMARQUE]

Un champ de bits sans nom d'une largeur de 0 force l'alignement du champ de bits suivant à la limite d' type suivante, où type est le type du membre.

l'exemple suivant déclare une structure qui contient des champs de bits :

// bit_fields1.cpp
// compile with: /LD
struct Date {
   unsigned short nWeekDay  : 3;    // 0..7   (3 bits)
   unsigned short nMonthDay : 6;    // 0..31  (6 bits)
   unsigned short nMonth    : 5;    // 0..12  (5 bits)
   unsigned short nYear     : 8;    // 0..100 (8 bits)
};

La disposition conceptuelle de mémoire d'un objet de type Date est affichée dans l'illustration suivante.

Disposition en mémoire d'objet date

Graphique Disposition en mémoire d'un objet date

Notez qu' nYear est 8 bits au maximum et provoquerait un dépassement de la limite de mot du type déclaré, unsigned short.Par conséquent, il est démarré au début de nouvel unsigned short.il n'est pas nécessaire que tous les champs de bits convenables dans un objet du type sous-jacent ; de nouvelles unités de stockage sont allouées, en fonction de le nombre de bits demandés dans la déclaration.

Spécifique à Microsoft

Classer les données déclarées comme des champs de bits est bas au bit le plus élevé, comme indiqué dans l'illustration ci-dessus.

détail de FIN Microsoft

Si la déclaration d'une structure comprend une zone fixe de longueur 0, comme indiqué dans l'exemple suivant,

// bit_fields2.cpp
// compile with: /LD
struct Date {
   unsigned nWeekDay  : 3;    // 0..7   (3 bits)
   unsigned nMonthDay : 6;    // 0..31  (6 bits)
   unsigned           : 0;    // Force alignment to next boundary.
   unsigned nMonth    : 5;    // 0..12  (5 bits)
   unsigned nYear     : 8;    // 0..100 (8 bits)
};

la disposition en mémoire est comme indiqué dans l'illustration suivante.

Disposition des objets de date au champ de bits de longueur zéro

Champ de bits de longueur 0 de disposition d'un objet date

Le type sous-jacent d'un champ de bits doit être un type entier, comme décrit dans types fondamentaux.

Voir aussi

Référence

Classes, structures, unions et