Ordre des champs lors de l'utilisation d'un champ de bits en C

J'ai une structure du type suivant

typedef struct
{
unsigned int a : 8;
unsigned int b : 6;
unsigned int c : 2;
}x, *ptr;

Ce que je voudrais faire, c'est de changer la valeur du champ c.

Je faire quelque chose comme

x structure = { 0 };
x->c = 1;

Quand je regarde la carte mémoire, je m'attends à trouver 00 01, mais à la place je trouve 00 40.
Il ressemble lors de l'organisation de la deuxième octet, il met c champ le plus bas de l'bits et b champ le plus élevé de bits. J'ai vu cela sur GCC et compilateurs pour Windows.

Pour l'instant, ce que je fais est la suivante, qui fonctionne OK.

unsigned char ptr2 = (unsigned char*) ptr
*(ptr2 + 1)  &= 0xFC
*(ptr2 + 1)  |= 0x01

Suis-je en regardant la carte mémoire de mal?
Je vous remercie pour votre aide.

Comment afficher le 00 40 de la valeur?
En supposant que ptr détient &structure (qui n'est pas clair dans votre question) *(ptr+1) est une marche rapide dans undefined behavior.
Désolé, le code n'est pas complet ici, j'ai effectué la conversion en unsigned short pour aller de 1 par tous les temps.
J'ai vérifié la carte mémoire dans Visual Studio, et imprimé les valeurs de la variable / champs plus tard.
ok. Le *ptr un type et un ptr comme une variable jeté ma tête. Je crois que je vois ce que vous faites. ptr est (maintenant est) un unsigned char* dans le déréférencement de code.

OriginalL'auteur fashasha | 2013-10-15