struct stats
{
char top : 1;
char bottom : 1;
char side : 2;
} MyStat;
I have seen this format
Bitfields should be declared with type signed int
, unsigned int
, or bool
from
. Other types may or may not be legal (depending on the platform), but be careful about the signedness — plain int
may be taken to be unsigned for a bitfield.
That said, it may be a hint to the compiler that the alignment of the struct
should be 1 and not sizeof(int)
. And the compiler is allowed to accept char
and assign it such meaning.
According to C99 6.7.2.1/9,
A bit-field is interpreted as a signed or unsigned integer type consisting of the specified number of bits. If the value 0 or 1 is stored into a nonzero-width bit-field of type _Bool, the value of the bit-field shall compare equal to the value stored.
and a footnote:
As specified in 6.7.2 above, if the actual type specifier used is
int
or a typedef-name defined asint
, then it is implementation-defined whether the bit-field is signed or unsigned.