有些資訊只需要佔乙個或者幾個二進位制位,不需要占用乙個完整的位元組,為節省空間,所以產生了位段結構。位段就是把乙個位元組中的二進位制劃分為幾個不同的區間,並說明每個區段的位數每個段有乙個段名,允許在程式中按段名進行操作,這樣就可以把幾個不同的物件用乙個位元組的二進位制位段來表示。
位段的宣告和位段變數的宣告相仿:
struct 位段結構名 ;
位段表的形式如下:
型別說明符 位段名:位段長度; 例如
struct packdatatype
;
位段的定義與結構變數的定義相同:
1先宣告位段型別後定義位段變數
struct packeddatatype
;struct packeddatatype data;//位段變數的定義
2在宣告位段型別時定義位段變數
struct packeddatatype
data;
3直接定義位段變數
struct
data;
上面data為packeddatatype型變數,共佔4個位元組,
對於位段的定義的2點說明
1位段可以無位段名,這是它只能用來做填充或調整位置,無名的位段是不能使用的,0寬度的無名段位段用來使下乙個位段從新的位元組起始位置開始存貯
2乙個位段必須存貯在同乙個位元組中,不能跨2個位元組。屄圖乙個位元組所剩空間不夠存放另一段時,將從下一位元組起存放此位段,也可以有意使某位段從下一位元組開始
struct packeddatatype
;
注意:1應為位段不允許跨位元組存貯所以位段的長度不能大於乙個位元組的長度,也就是位段長度不能超過8位二進位制
2位段在本質上是一種結構型別,只不過成員是按二進位制分配的
3位段成員必須是int或者unsigned型別的
位段的講解
位段的成員必須是int,unsigned int,signed int。比如 struct a a就是乙個位段型別。那麼位段的大小是多少呢?printf d n sizeof struct a 8位段的記憶體分配 位段的成員可以是 int,unsigned int,signed int 或者是 ch...
C語言位域 位段
有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如開關只有通電和斷電兩種狀態,用0和1表示足以,也就是用乙個二進位。所以c語言又提供了一種資料結構,稱為位域或 位段。位域在應用開發中較少使用,你可以暫時跳過,遇到相關問題再回來溫習。所謂 位域 是把乙個位元組中的二進位...
C語言位域 位段
有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如開關只有通電和斷電兩種狀態,用0和1表示足以,也就是用乙個二進位。所以c語言又提供了一種資料結構,稱為位域或位段。位域在應用開發中較少使用,你可以暫時跳過,遇到相關問題再回來溫習。所謂 位域 是把乙個位元組中的二進位劃...