ARRAY of BITS in C

A few things to consider when using bit fields.

c99 - Bit Fields.
An implementation may allocate any addressable storage unit large enough to hold a bitfield.
If enough space remains, a bit-field that immediately follows another bit-field in a structure shall be packed into adjacent bits of the same unit.
If insufficient space remains, whether a bit-field that does not fit is put into the next unit or overlaps adjacent units is implementation-defined.
The order of allocation of bit-fields within a unit (high-order to low-order or low-order to high-order) is implementation-defined.
The alignment of the addressable storage unit is unspecified.

Also note that the standard says that a "bit-field shall have a type that is a qualified or unqualified
version of int, unsigned int, or signed int", so having a bit-field in a char type is non-standard.

Oh, and nick, the bitfield using 'byte' is non-standard it should be 'unsigned int', the size difference is due to things using the bitfield, not the actual bitfield itself. Try casting foo like: 'Serial.println( ( char ) bar.foo );'