1.位段的聲明和結構類似,但它的成員是一個或多個位的字段。這些不同長度的字段實際上存儲於一個或多個整型變量中。
2.位段的聲明和任何普通的結構成員聲明相同,但有兩個例外。
1>位段成員必須聲明為int,singed int 或unsigned int類型。
2>其次,在成員名的後面是一個冒號和一個整數,這個整數指定該位段所占用的位的數目。
eg:
struct CHAR {
unsigned int ch : 7;
unsigned int font :6;
unsigned int size :19;
};
struct CHAR ch1
說明:
² 用signed或unsigned整數顯示地聲明位段是個好方法。如果位段聲明為int類型,它究竟被解釋為有符號數還是無符號數是由編譯器決定的。
² 注重可移植性的程序應該避免使用位段。由於下面這些與實現有關的依賴性,位段在不同的系統中可能有不同的結果。
1>int位段被當作有符號數還是無符號數
2>位段中位的最大數目。許多編譯器把位段成員的長度限制在一個整型值的長度之內,所以一個能夠運行於32位整數的機器上的位段聲明可能在16位整數的機器上無法運行。
3>位段中的成員在內存中是從左向右分配還是從右向左分配
4>當一個聲明指定了兩個位段,第2個位段比較大,無法容納於第1個位段剩余的位時,編譯器有可能把第2個位段放在內存的下一個字,也可能直接放在第1個位段後面,從而在內存位置的邊界上形成重疊。
二.位段的好處
1.它能夠把長度為奇數的數據包包裝在一起,節省存儲空間2.另一個使用位段的理由是由於它們可以很方便地訪問一個整型值的部分內容。
說明:
使用位段只是基於方便的目的。任何可以用位段實現的任務都可以使用移位和屏蔽來實現(既用位操作符:| ,&, ~)。