先來個位域申明:
struct
元素
描述type
整數型別,決定了如何解釋位域的值。型別可以是整型、有符號整型、無符號整型。
member_name
位域的名稱。
width
位域中位的數量。寬度必須小於或等於指定型別的位寬度。
帶有預定義寬度的變數被稱為位域。位域可以儲存多於 1 位的數,例如,需要乙個變數來儲存從 0 到 7 的值,您可以定義乙個寬度為 3 位的位域,
儲存從0到7的值
需要3位的位域
0到3需要2位
0到1需要1位
如下:
struct
age;
此處貼的位域測試**為網上看到,僅供參考
// 位域記憶體測試
#include
struct one_byte
one_byte;
struct two_byte
two_byte;
struct three_byte
three_byte;
struct four_byte
four_byte;
struct eight_byte
eight_byte;
intmain
(int argc,
char
const
*ar**)
輸出結果為:
sizeof one_byte is :
1bsizeof two_byte is :
2bsizeof three_byte is :
3bsizeof four_byte is :
4bsizeof eight_byte is :
4b
下圖為本人親自在linux環境下執行後的結果,與上面結果一致
(1)結構體內存分配原則:
原則一:結構體中元素按照定義順序存放到記憶體中,但並不是緊密排列。從結構體儲存的首位址開始 ,每乙個元素存入記憶體中時,它都會認為記憶體是以自己的寬度來劃分空間的,因此元素存放的位置一定會在自己大小的整數倍上開始。
原則二: 在原則一的基礎上,檢查計算出的儲存單元是否為所有元素中最寬的元素長度的整數倍。若是,則結束;否則,將其補齊為它的整數倍。
(2)定義位域時,各個成員的型別最好保持一致,比如都用char,或都用int,不要混合使用,這樣才能達到節省記憶體空間的目的。
C語言之位域
位域的定義和使用示例 位域的儲存規則理解 新名詞記錄 c語言中的位域,給了我們對於位元組的位進行操作。對於一些只需要1位或者幾位就能儲存的資料,就不必要去開闢更多的空間去儲存,從而避免不必要的浪費。要學習位域,我們需要掌握位元組和位的關係,當然還有基本資料型別儲存所需要的位元組空間。struct 說...
C語言位域和位段
c結構體之位域 位段 有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾個不同的區...
C語言之位段
結構體可以用來實現位段,在c語言中多數情況下按照乙個位元組的整數倍為單位處理資料,也就是必須是以8位為單位處理資料,比如乙個char為8位,乙個int可能為32位.位段使我們可以按 任意 位處理資料,比如7位,6位等.位段的宣告如下 位段宣告 型別 識別符號 位寬表示式 struct char st...