these are bit fields. in structures you can determine how many bits are assigned to a variable (overriding the standard for the type of variable)
in the above example, x uses only 1 byte and therefore can only take the value 0 or 1.
see the following example from book C. follow the link for more information.
struct { unsigned field1 :4; unsigned :3; signed field2 :1; unsigned :0; unsigned field3 :6; }full_of_fields;
source share