最近接觸到了位域這個概念,大家都知道位元組是記憶體定址的最小單元,但有時我們僅需要幾位的二進位制空間來儲存資料,c語言定義了位域幫助更加接近底層,按照需求來分配空間,將1bit 分為更小的空間。
一、位域的使用方法
1、定義
struct 位域結構名
;其中位域列表的形式為: 型別說明符 位網域名稱:位域長度
例:struct test1
bits;
sizeof(test1) = 4, 為乙個整形所佔空間(作業系統為64位)
下面我通過幾個例子來介紹位域的注意事項。
例1:struct test1
bits;
位於變數必須儲存在同一位元組中,不能跨兩個位元組,若剩餘位置不夠則從下一位元組開始,同樣可以使用int :0;使ib從下乙個int單元開始(可以使用其他整形和字元型,不能使用浮點型)
sizeof(test1) = 8
例2:struct test2
bits;
sizeof(test2) =3 無名位域可用於佔位。
例3:struct test3
sizeof(test3) = 16
位域要遵守位元組對齊,即記憶體單元的首位址要能被基本型別成員的大小所整除。
二、位域的使用
與結構體相似:
struct
bits;
int main()
輸出:3
ps:實際操作中編譯器會對位域有所優化,例如:
struct test4
bits;
ia位數大於8,不符合「乙個位域必須儲存在同乙個位元組中,不能跨兩個位元組」的規則,但實際卻沒有問題。
C C 位域定義
有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾個不同的區域,並說明每個區域的位...
C C 中的位域 bit field
位域是c c 中常用的資料結構。在某些情況下合理的使用位域可以節省儲存空間,提高執行效率並提高程式的可讀行。按照我以往的程式設計經驗來看,通常以下情況下會優先考慮使用位域。1 有很多的狀態標記,需要集中儲存,比如tcp鏈結 的狀態 2 協議棧相關的資料結構,尤其是底層通訊協議中很多情況使用乙個或者幾...
C C 大小端 位域 記憶體詳解
面試時遇到關於大小端 位段 或者叫位域 和記憶體對齊的考題,然後就不知所措了。這部分對於嵌入式底層工作者是必須要掌握的,其他方面不是必須的 但還是很有必要學習理解這些知識點,因為它可以讓你更了解c 的,了解程式在記憶體的運 況,也能加深對計算機系統的理解。1 從靜態儲存區分配 此時的內存在程式編譯的...