Pola bitowe określają nieoczekiwane zachowanie przypisania

Nie wiem dlaczego, ale przypisanie pól bitowych nie działa zgodnie z oczekiwaniami. Prawdopodobnie to tylko głupia rzecz, ale nie udało mi się zlokalizować problemu.

Każda pomoc jest więcej niż mile widziana.

<code>typedef struct  a {
    unsigned char a1 :1;
    unsigned char a2 :3;
    unsigned char a3 :2;
    unsigned char a4 :2;
} __attribute__((packed)) mystruct;

int main() {
    mystruct d;
    d.a1 = 0;
    d.a2 = 2;
    d.a3 = 1;
    d.a4 = 2;

    unsigned char *val = (unsigned char*) &d;

    printf("%02X \n", *val);
    printf("%02X \n", sizeof(hola));

    exit(0);
}
</code>

zwrócone dane wyjściowe:

<code>94
01
</code>

oczekiwany wynik:

<code>26
01
</code>

questionAnswers(2)

yourAnswerToTheQuestion