BIT-FIELDS
----------
* A structure member may be declared to consist of a specified number of bits
(including a sign bit, if any). Such a member is called a bit-field; its
width is preceded by a colon.
* A bit-field will have a type that is signed int, or unsigned int. A
bit-field is interpreted as a signed or unsigned integer type consisting of
the specified number of bits.
* An implementation (i.e., a compiler) may allocate storage large enough to
store the bit-field.
* If one bit-field follows another bit-field, then allocation for these
fields would be given in the same storage unit, if sufficient storage
space is available.
Ex: int a: 2;
int b: 2; will be stored in the same int.
* Similarly, if two bit-fields are next to each other and if they can not
be stored in the same storage unit, then whether the two bit-fields
overlap each other, or are allocated two storage units are implementation
-defined.
Ex: int a: 28;
int b: 10;
Here, whether A and B are stored separately in two ints or four bits
of B are stored in first int and the rest in second int, is implementation
-defined. Assume size of int to be 4 bytes.
* Another point is that the order of allocation of bit-fields (left-to-right
or right-to-left) in the storage unit is implementation-defined.
* A bit-field of non-zero width without the variable (identifier) name
is considered as padding. A special case, a bit-field member with a
width of 0, is considered as no other bit-fields are to be packed in
the same storage unit in which the previous bit-field member, if any,
was stored.
* The address operator (&) can not be applied to bit-field members; hence,
there are no pointers to or arrays of bit-field members.