In the first example, you are explicitly saying how many bits of the integer should the value of "a" take up - bits 0 to 8 inclusive, for a total of 9.
In the second, you are saying that "a" occupies an entire unsigned int (usually 32 bits).
So if you had an instance of each strucure called "b" and you did this:
b.a = 0xffff;
printf("0x%x", (unsigned int) b);
Then the first way would print "0x1ff" and the second "0xffff";
You can use this to combine values into a single integer, or byte which can help with communications, either between processes or external hardware.