#include #include typedef struct foo { unsigned char foo_0:2, foo_1:2, foo_2:2, foo_3:2; } foo; union ucb { struct bits { unsigned char :4, b0:1, b1:1, b2:1, b3:1; } bits; unsigned char c; }; int main(int argc, char** argv) { union ucb u; foo bar; bar.foo_0=0; bar.foo_1=1; bar.foo_2=2; bar.foo_3=3; printf("%d %d %d %d\n", bar.foo_0, bar.foo_1, bar.foo_2, bar.foo_3); bar.foo_0=1; bar.foo_1=1; bar.foo_2=1; /* bar.foo_3=3;*/ printf("%d %d %d %d\n", bar.foo_0, bar.foo_1, bar.foo_2, bar.foo_3); bar.foo_0=0; bar.foo_1=3; bar.foo_2=2; bar.foo_3=1; printf("%d %d %d %d\n", bar.foo_0, bar.foo_1, bar.foo_2, bar.foo_3); bar.foo_0=3; bar.foo_1=1; /* bar.foo_2=2;*/ bar.foo_3=2; printf("%d %d %d %d\n", bar.foo_0, bar.foo_1, bar.foo_2, bar.foo_3); printf("%d\n", sizeof(bar)); u.c=0; u.bits.b0=1; u.bits.b2=1; printf("c: %d\n", u.c); u.c=(unsigned char)atoi(argv[1]); printf("c.b0: %d\n", u.bits.b0); printf("c.b1: %d\n", u.bits.b1); printf("c.b2: %d\n", u.bits.b2); printf("c.b3: %d\n", u.bits.b3); }