#include <stdio.h>
int main(void)
{
/*struct bs
{
unsigned a: 1;
unsigned b: 3;
unsigned c: 4;
unsigned d: 24;
unsigned e: 1;
}bit, *pbit;*/
struct bs
{
unsigned a: 9;
//unsigned :0 ;/*空域*/
//char b:4 ;/*從下一單元開始存放*/
unsigned c:24;
}bit, *pbit;
printf("sizeof(bs) = %d\n", sizeof(bit));
/*bit.a = 1;
bit.b = 7;
bit.c = 15;
printf("%d,%d,%d\n", bit.a, bit.b, bit.c);
pbit = &bit;
pbit->a = 0;
pbit->b &= 3;
pbit->c |= 1;
printf("%d,%d,%d\n", pbit->a, pbit->b, pbit->c);*/
return 0;
}
1.a,空域皆爲char時,二者共佔據1字節;
3. 位域可以無位域名,這時它只用來作填充或調整位置。無名的位域是不能使用的,在代碼中不能使用它。
4.注意機器的大小端,這樣算出來的結果可能在高低位地址實際排放的結果會相反。
5.注意有符號數的操作。因爲位域是用原碼對數據操作,而負數是用補碼進行存儲的,對於有符號的數,最好是用無符號unsigned來定義