有些資訊在儲存時,並不需要占用乙個完整的位元組, 而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言提供了一種資料結構,稱為「位域」或「位段」。所謂「位域」是把乙個型別單元中的二進位劃分為幾個不同的區域, 並說明每個區域的位數。每個域有乙個網域名稱,允許在程式中按網域名稱進行操作。 這樣就可以達到壓縮資料的目的。
位域定義
位域定義與結構定義相仿,其形式為:
struct
slabel ;
struct
foo4
t;t.c = 50*1024;
printf("%d",t.c);
intlen = sizeof(foo4);
printf("%d",len);
return 0;
輸出t.c是51200,可以看出c可以取到18bits。
2. 因為在乙個byte中,bit位也是有分big-endian和small-endian的,所以位域的移植性並不好。不過在嵌入式中由於有許多特定的裝置,在此中可以盡情使用位域。
在本文中,位域型別就是資料型別,呵呵。位域可以看作是取值範圍縮小了的位域型別,所有對位域型別能做的操作,對位域都能做。比較難的地方在於位域字段的壓縮與對齊。嗯,還有signed和unsigned型別要特別注意。
位域之我見(原創)
位域是個好東西,我認為它的功能主要是節省記憶體空間,但給定址帶來極大的不便,估計會導致速度變慢,所以可能有的cpu會禁止此功能或者說強制以位元組對齊之類的。可能某些編譯器的編譯選項也可以幫助位址對齊,但乙個比較簡單的方法是用 廢位 來填充不用的位來對齊。測試位域的使用存放和使用 struct bs ...
C語言位域 位段
有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如開關只有通電和斷電兩種狀態,用0和1表示足以,也就是用乙個二進位。所以c語言又提供了一種資料結構,稱為位域或 位段。位域在應用開發中較少使用,你可以暫時跳過,遇到相關問題再回來溫習。所謂 位域 是把乙個位元組中的二進位...
C語言位域 位段
有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如開關只有通電和斷電兩種狀態,用0和1表示足以,也就是用乙個二進位。所以c語言又提供了一種資料結構,稱為位域或位段。位域在應用開發中較少使用,你可以暫時跳過,遇到相關問題再回來溫習。所謂 位域 是把乙個位元組中的二進位劃...