Qu'est-ce que Champ de bits (bit-field) ?

Mécanisme qui déclare un membre d'une struct C comme un champ d'un nombre de bits donné, comme unsigned int x : 3;. Comme il permet de regrouper de petites valeurs, on l'utilise pour rassembler des indicateurs et des réglages. Stocker une valeur qui ne tient pas dans un champ non signé laisse le reste de sa division par 2 puissance la largeur du champ. Le fait que les champs soient rangés à partir des bits de poids fort ou de poids faible d'un mot, ou qu'un champ puisse chevaucher une frontière, peut varier selon l'implémentation : pour décrire les registres de périphériques ou les formats de communication, on utilise donc souvent des masques et des décalages à la place.

Nom japonais: ビットフィールド

« Champ de bits (bit-field) » apparaît dans 2 questions d'entraînement réparties sur 2 thèmes, dont Systèmes embarqués et firmware, Bases de la programmation en C.

Domaine: Bases de la programmation en C

S'entraîner : questions sur Champ de bits (bit-field)

Lorsqu'on représente les registres d'un périphérique par une structure C à champs de bits, à quoi faut-il prendre garde ?

  1. ALes champs de bits rendent toujours le programme deux fois plus rapide
  2. BL'ordre des bits notamment peut varier selon le compilateur, si bien qu'un autre compilateur peut manipuler des bits différents de ceux prévus
  3. CLes champs de bits ne peuvent pas représenter de valeurs de plus de 8 bits
Afficher la réponse et l'explication

Réponse : B. L'ordre des bits notamment peut varier selon le compilateur, si bien qu'un autre compilateur peut manipuler des bits différents de ceux prévus

Les champs de bits rendent le code lisible, mais la norme C laisse à l'implémentation l'ordre des bits dans la struct (du poids fort ou du poids faible), le traitement des champs chevauchant une frontière, la largeur des accès, etc. Un code correct avec un compilateur peut donc lire ou écrire des bits différents avec un autre compilateur ou un autre processeur. Les en-têtes fournis par les fabricants de microcontrôleurs sont le plus souvent écrits avec des masques et des décalages.

« Champ de bits (bit-field) » dans les explications

Questions mentionnant « Champ de bits (bit-field) » (2)

  1. Lorsqu'on représente les registres d'un périphérique par une structure C à champs de bits, à quoi faut-il prendre garde ?
  2. Quelle est la sortie obtenue en exécutant le code ci-dessus, qui stocke 9 dans un champ de bits de 3 bits ?

Termes associés

struct (structure C) Alignement et remplissage (padding) Allocation dynamique de mémoire Comportement indéfini (undefined behavior) Débordement de tampon (buffer overflow) Fuite de mémoire (memory leak) Macro (#define) Pointeur Pointeur de fonction Pointeur pendant (dangling pointer)

Retour au glossaire