11.10 Structures, Unions, Enumerations, and Bit-Fields

ISO Standard Implementation
“Whether a “plain” int bit-field is treated as a signed int bit-field or as an unsigned int bit-field (C90 6.5.2, C90 6.5.2.1, C99 6.7.2, C99 6.7.2.1).”
A plain int bit-field is treated as an unsigned integer. Signed integer bit-fields are not supported.
“Allowable bit-field types other than _Bool, signed int, and unsigned int (C99 6.7.2.1).”
The signed and unsigned char type is allowed.
“Whether a bit-field can straddle a storage unit boundary (C90 6.5.2.1, C99 6.7.2.1).”
A bit-field cannot straddle a storage unit. Any bit-field that would straddle a storage unit will be moved to the LSb position in a new storage unit.
“The order of allocation of bit-fields within a unit (C90 6.5.2.1, C99 6.7.2.1).”
The first bit-field defined in a structure is allocated the LSb position in the storage unit. Subsequent bit-fields are allocated higher-order bits.
“The alignment of non-bit-field members of structures (C90 6.5.2.1, C99 6.7.2.1).”
No alignment is performed.
“The integer type compatible with each enumerated type (C90 6.5.2.2, C99 6.7.2.2).”
The type chosen to represent an enumerated type depends on the enumerated values. A signed type is chosen if any value is negative; unsigned otherwise. If a char type is sufficient to hold the range of values, then this type is chosen; otherwise, an int type is chosen. Enumerated values must fit within an int type and will be truncated if this is not the case.