位段的講解

2021-09-27 04:32:34 字數 854 閱讀 2807

位段的成員必須是int,unsigned int,signed int。

比如:

struct a

;

a就是乙個位段型別。

那麼位段的大小是多少呢?

printf("%d\n", sizeof(struct a));//8
位段的記憶體分配

位段的成員可以是 int, unsigned int,signed int 或者是 char (屬於整形家族)型別

位段的空間上是按照需要以4個位元組( int )或者1個位元組( char )的方式來開闢的。

位段涉及很多不確定因素,位段是不跨平台的,注重可移植的程式應該避免使用位段

舉個例子吧:

//乙個例子 

struct s

; struct s s = ;

s.a = 10;

s.b = 12;

s.c = 3;

s.d = 4;

位段的跨平台問題

int 位段被當成有符號數還是無符號數是不確定的。

位段中最大位的數目不能確定。(16位機器最大16,32位機器最大32,寫成27,在16位機器會出問 題。

位段中的成員在記憶體中從左向右分配,還是從右向左分配標準尚未定義。

當乙個結構包含兩個位段,第二個位段成員比較大,無法容納於第乙個位段剩餘的位時,是捨棄剩餘的 位還是利用,這是不確定的

總結:

跟結構相比,位段可以達到同樣的效果,但是可以很好的節省空間,但是有跨平台的問題存在。

位段,列舉,聯合的講解

一 位段 位段 度娘給出的解釋是,c語言允許在乙個結構體中以位為單位來指定其成員所佔記憶體長度,這種以位為單位的成員稱為 位段 或稱 位域 bit field 利用位段能夠用較少的位數儲存資料。位段的宣告和結構體很相似,但不同的是 位段的成員可以是int,unsigned int,signed in...

位段的宣告

有些資訊只需要佔乙個或者幾個二進位制位,不需要占用乙個完整的位元組,為節省空間,所以產生了位段結構。位段就是把乙個位元組中的二進位制劃分為幾個不同的區間,並說明每個區段的位數每個段有乙個段名,允許在程式中按段名進行操作,這樣就可以把幾個不同的物件用乙個位元組的二進位制位段來表示。位段的宣告和位段變數...

C語言位域 位段

有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如開關只有通電和斷電兩種狀態,用0和1表示足以,也就是用乙個二進位。所以c語言又提供了一種資料結構,稱為位域或 位段。位域在應用開發中較少使用,你可以暫時跳過,遇到相關問題再回來溫習。所謂 位域 是把乙個位元組中的二進位...