This code has no determinable behavior. It is impossible to predict any outcome of it without a very specific compiler in mind.
It contains the following implementation-defined behavior (quotes from Annex J of the standard):
— Whether a ‘‘plain’’ int bit-field is treated as a signed int
bit-field or as an unsigned int bit-field (6.7.2, 6.7.2.1).
— Allowable bit-field types other than _Bool, signed int, and unsigned
int (6.7.2.1).
— Whether a bit-field can straddle a storage-unit boundary (6.7.2.1).
— The order of allocation of bit-fields within a unit (6.7.2.1).
— The alignment of non-bit-field members of structures (6.7.2.1). This
should present no problem unless binary data written by one
implementation is read by another.
The second remark also implies that the compiler must have a non-standard extension.
On top of that, the code also depends on endianess and you cannot know which bits in the bit-field that are the MSB and LSB.