From the C standard: "The order of allocation of bit-fields within a unit (high-order to low-order or low-order to high-order) is implementation-defined."
So you shouldn't use bitfields where the order matters.
Use explicit masking and shifting instead:
reqbit1 = (w >> 1) & 1;
reqbit2 = (w >> 4) & 3;
or
reqbit1 = (w & 0x00000002) >> 1;
reqbit2 = (w & 0x00000010) >> 4;
and for the other direction
w = (reqbit1 << 1) | (reqbit2 << 4);
The "unwanted" parts are typically named reserved1
and so on.