位段(以32位int整數的機器爲例)數組
概念:ide
C語言容許在一個結構體中以位爲單位來指定成員所佔內存的實際大小,這種以位爲單位的成員咱們稱爲spa
位段,位段是一種特殊的結構體,位段的聲明和任何普通的結構體成員聲明相似,以下:3d
Struct 位段結構體名指針
{blog
Unsigned 位段名:位段長度;內存
Unsigned 位段名:位段長度;get
………………..it
Unsigned 位段名:位段長度;io
}位段結構體變量名;
但有兩個例外,首先位段成員必須聲明成int ,unsigned int, signed int,。其次,在成員的後面是一
個冒號和一個整數,這個整數指定該位段所佔用位的個數。
位段使用時須要注意是:
位段結構體中的成員不能使用位段數組和位段指針,但結構體變量能夠使數組或者指針,由於數組和指針都是以字節爲單位的,同理也不能用&獲取位段的地址。
例如:聲明一個位段,咱們先來分析一下他在計算機裏面是如何存儲的(一個無符號的int是4字節)。
struct tagAAA
{
unsigned int a : 1;
unsigned int b : 2;
unsigned int c : 6;
unsigned int d : 4;
unsigned int e;
}AAA_S;
由此咱們能夠明白位段的優勢,原本定義了5個成員,須要5個存儲單位,可是使用位段後只須要4個存儲空間就足夠了。
優勢:
但它的成員是一個或多個位的字段,這些不一樣長度的字段其實是存儲於一個或多個×××變量中,他的優勢是可以以較少的內存單元存儲數據。位段能夠用×××形式輸出。
struct tagAAA
{
unsigned int a : 1;
unsigned int : 2;
unsigned int c : 6;
unsigned int d : 4;
unsigned int e;
}AAA_S;