Two things:
1. The behaviour you're seeing is an indication of alignment at play.
The CPU finds it cumbersome to deal with such tiny transactions in and
out of the memory, so it pads such bitfields. This is standard
behaviour.
2. If you want to truly avail bit-sized variables, do something like
declaring 32 single bit fields in a struct. Short of that, I don't
suppose there's a way of natively overcoming alignment restrictions to
let you operate at bit level.