C 語言位域使用及其注意事項

發表於2016-12-18

所謂“位域”是把一個位元組中的二進位劃分為幾個不同的區域,並說明每個區域的位數。每個域有一個域名,允許在程式中按域名進行操作。這樣就可以把幾個不同的物件用一個位元組的二進位制位域來表示。位域的定義和位域變數的說明位域定義與結構定義相仿,其形式為:

struct 位域結構名

{ 位域列表 };

eg:

位域雖然簡單好用,但使用時需要注意:

1) 如果相鄰位域欄位的型別相同,且其位寬之和小於型別的sizeof大小,則後面的字

段將緊鄰前一個欄位儲存,直到不能容納為止;

2) 如果相鄰位域欄位的型別相同,但其位寬之和大於型別的sizeof大小,則後面的字

段將從新的儲存單元開始,其偏移量為其型別大小的整數倍;

3) 整個結構體的總大小為最寬基本型別成員大小的整數倍。

4) 如果相鄰的位域欄位的型別不同,則各編譯器的具體實現有差異,VC6採取不壓縮方

式,Dev-C++採取壓縮方式;

5) 如果位域欄位之間穿插著非位域欄位,則不進行壓縮;(不針對所有的編譯器)

4 ,5跟編譯器有較大的關係,使用時要慎重,儘量避免。

相關文章