Struct – Expliquez le résultat:

J’ai le code C suivant.

struct values{ int a:3; int b:3; int c:2; }; void main(){ struct values v={2,-6,5}; printf("%d %d %d",va,vb,vc); } 

Lorsque j’exécute le code, j’obtiens le résultat suivant:

 2 2 1. 

Mais la sortie devrait être 2 -6 5 , non?

Si je me trompe, s’il vous plaît expliquer.

-6 dépasse la plage d’un entier signé de 3 bits. Par conséquent, vous observez un artefact de comportement non défini défini par l’ implémentation (en pratique, les bits les plus significatifs de votre valeur sont supprimés).

 {2, | -6, | 5 } 010 last 3 bits | 010 last 3 bits | 01 last 2 bits 2 2 1 

La sortie est 2 2 1 .

Le compilateur C convertit les valeurs en binary et les stocke dans la mémoire.

Valeur binary de 2: 00000010

Valeur binary de -6: 11111010 (11111001 + 1)

Valeur binary de 5: 00000101

En enregistrant en mémoire:

Pour 2, 010 sera stocké.

Pour -6, 010 sera stocké.

Pour 5, 01 sera stocké.

Lorsque vous accédez à ces variables depuis votre méthode principale, pour va “010” sera renvoyé, ici le bit le plus à gauche est pour signe.

Donc, va est 2. De même vb est 2 et vc est 1.

J’espère que ça aide.