Code:
Assuming you're on a 32-bit (little endian) machine, the union will be 64 bits long. Initializing with {12, 1} gives:
00110000 10000000 00000000 00000000
Note that the first struct is 4 chars long, which is 32 bits total. Therefore, no matter what you set those chars to, it will never go past the first 32 bits of the 64 bit union, and so the second int will never be touched. Unless of course you explicitly set the u.st.b directly.
Posted in code tags because it wouldn't let me post otherwise.