Comportamiento inesperado de la estructura de los campos de bits

No sé por qué, pero la asignación de campos de bits no funciona como se esperaba. Probablemente es solo una estupidez, pero no he podido localizar el problema.

Cualquier ayuda es más que bienvenida.

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

salida devuelta:

<code>94
01
</code>

Rendimiento esperado:

<code>26
01
</code>

Respuestas a la pregunta(2)

Su respuesta a la pregunta