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.