在C語言中,位域(Bit-field)是一種特殊的結構體成員,允許指定成員佔用的二進制位數(bits),而非整個字節。這對於節省內存、進行底層硬件寄存器操作、實現緊湊數據結構極為有用。
題目中的代碼 int a : 1; 正是位域語法:類型 成員名 : 位寬。它聲明成員 a 僅佔用 1個二進制位,只能存儲 0 或 1。
struct 結構體名 {
類型說明符 位域名 : 位域長度;
// ... 更多位域
};
struct bs {
int a : 8; // 佔8位
int b : 2; // 佔2位
int c : 6; // 佔6位
} data; // data 共佔 2 字節 (16位)
unsigned : 0 強制對齊)。int 通常為32位)。int : 2;。訪問方式與普通結構體成員相同:變量名.位域名 或 指針->位域名。支持算術、位運算、賦值等操作,但賦值不能超出位域表示範圍(如 2位只能存 0-3)。
struct bs {
unsigned a : 1;
unsigned b : 3;
unsigned c : 4;
} bit, *pbit;
bit.a = 1; bit.b = 7; bit.c = 15;
printf("%d,%d,%d\n", bit.a, bit.b, bit.c); // 輸出 1,7,15
pbit = &bit;
pbit->a = 0;
pbit->b &= 3; // 位與運算
pbit->c |= 1; // 位或運算
printf("%d,%d,%d\n", pbit->a, pbit->b, pbit->c); // 輸出 0,3,15
&bit.a 非法),因其不佔用獨立字節地址。sizeof 作用於位域結構體返回整體佔用字節數,而非位數之和。位域是C語言提供的位級數據操作機制,通過 類型 名 : 寬度 語法在結構體中定義。它能極大節省內存並簡化位操作代碼,但佈局有實現相關性,適用於內存受限環境、硬件交互、協議解析等場景。掌握其定義規則、訪問方式及限制,是進階C程序員的必修課。