Comportamento inesperado da atribuição do struct dos campos do bit

Eu não sei porque, mas a atribuição de campos de bits não está funcionando como esperado. Provavelmente é apenas uma coisa estúpida, mas não consegui localizar o problema.

Qualquer ajuda é mais do que bem vinda.

<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>

saída retornada:

<code>94
01
</code>

saída esperada:

<code>26
01
</code>

questionAnswers(2)

yourAnswerToTheQuestion