C語言之位域的概念和用法

2021-09-25 12:57:28 字數 1491 閱讀 4565

先來個位域申明:

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...