Definir união que pode acessar bits, nibbles, bytes

union bits {
   unsigned int a : 1;
    unsigned int b : 2;
    unsigned int c : 3;
    unsigned int d : 4;``
    unsigned char x[2];
    unsigned int z; 
};

Suponha que em uma união de 32 bits, eu precise usar um único bit, ou um grupo de bits, nibble ou bytes. Existe uma maneira de definir a união.