问:

C语言 位域中占有字符大小的计算和位域填充的作用

答:
上面三个成员共占12bit,但是实际上占用3个字节。
位域填充的作用:
由于CPU访问内存的最小单位是字节,所以位域成员可能不会完全填满一个字节。填充的作用就是让那些未使用的bit补0,从而让每个字节中的所有bit都有明确的值。
例如上面的例子中,a occupys 3 bits, b occupys 5 bits,剩下的2bits就需要填充0。所以foo实际占用的3个字节是:
a: 011 (3 bits)
b: 10001 (5 bits)
c: 0100 (4 bits)
填充: 00    (2 bits)
所以填充的主要作用是确保每个字节中所有的bit都有确定的值,并不会带来额外的空间消耗。
总结:位域的大小计算是以bit为单位,但是由于CPU访问内存最小单位是字节,所以实际会占用整个字节。填充的作用是让字节中未使用的bit补0,从而让每个字节中的所有bit都有确定的值。