二、位結構
位結構是一種特殊的結構,在需按位訪問一個字節或字的多個位時,位結構比按位運算符更加方便。
位結構定義的一般形式為:
struct位結構名{
數據類型 變量名: 整型常數;
數據類型 變量名: 整型常數;
} 位結構變量;
其中:數據類型必須是int(unsigned或signed)。整型常數必須是非負的整數,范圍是0~15,表示二進制位的個數,即表示有多少位。
變量名是選擇項,可以不命名,這樣規定是為了排列需要。
例如:下面定義了一個位結構。
struct{
unsigned incon: 8; /*incon占用低字節的0~7共8位*/
unsigned txcolor: 4;/*txcolor占用高字節的0~3位共4位*/
unsigned bgcolor: 3;/*bgcolor占用高字節的4~6位共3位*/
unsigned blink: 1; /*blink占用高字節的第7位*/
}ch;
位結構成員的訪問與結構成員的訪問相同。
例如: 訪問上例位結構中的bgcolor成員可寫成:
ch.bgcolor
注意:
1.位結構中的成員可以定義為unsigned,也可定義為signed,但當成員長度為1時,會被認為是unsigned類型。因為單個位不可能具有符號。
2.位結構中的成員不能使用數組和指針,但位結構變量可以是數組和指針,如果是指針,其成員訪問方式同結構指針。
3.位結構總長度(位數),是各個位成員定義的位數之和,可以超過兩個字節。
4.位結構成員可以與其它結構成員一起使用。
例如:
struct info{
char name[8];
int age;
struct addr address;
float pay;
unsigned state: 1;
unsigned pay: 1;
}workers;'
上例的結構定義了關於一個工從的信息。其中有兩個位結構成員,每個位結構成員只有一位,因此只占一個字節但保存了兩個信息,該字節中第一位表示工人的狀態,第二位表示工資是否已發放。由此可見使用位結構可以節省存貯空間。