Bases de la programmation en C

struct { unsigned int x : 3; } s;
int v = 9;
s.x = v;
printf("%d\n", s.x);

Quelle est la sortie obtenue en exécutant le code ci-dessus, qui stocke 9 dans un champ de bits de 3 bits ?

  1. A1
  2. B7
  3. C9
Afficher la réponse et l'explication

Réponse : A. 1

x est un champ de bits non signé de 3 bits : il ne peut représenter que 0 à 7. Stocker une valeur qui ne tient pas dans un type non signé donne le reste de sa division par 2³ = 8 : 9 devient donc 1. Les champs de bits servent à regrouper de petites valeurs, comme les champs de configuration d'un registre ou les indicateurs d'une communication, mais des détails comme l'ordre des bits des champs varient selon l'implémentation. Avec gcc, affecter directement la constante 9 à s.x donne un avertissement.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases de la programmation en C

  1. Quelle est la sortie obtenue en exécutant le code ci-dessus, qui utilise la macro SQUARE définie par #define ?
  2. Le fichier d'en-tête sensor.h est écrit comme ci-dessus. Quel est le rôle des trois lignes #ifndef, #define et #endif ?
  3. Quelle est la sortie obtenue lorsque le code ci-dessus est écrit dans la fonction main et exécuté ?
  4. Un registre de sortie de microcontrôleur est déclaré et utilisé comme ci-dessus. Quelle description de cette déclaration est correcte ?
  5. Quelle description du comportement indéfini, au sens de la norme du langage C, est correcte ?