C語言結構體中的位段

2021-10-21 08:31:59 字數 620 閱讀 4091

c語言結構體中的位段

位段的記憶體分配

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

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

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

例題:

解析:

位段的跨平台問題

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

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

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

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

還是利用,這是不確定的。

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

C語言結構體與位段

1.結構體的定義 有以下3種方法定義結構體型別變數。1 先宣告結構體型別再定義變數 2 在宣告型別的同時定義變數 例如 struct student student1,student2 3 直接定義結構體型別變數struct 變數名錶 2.結構體初始化 例如 struct student stude...

c語言結構體例項使用 位段結構體

一 位段結構體介紹 位段結構體就是按位讀寫,c語言提供了專門的結構體方式 二 位段結構體定義 struct struct status 三 位段結構體訪問 status.widthvalidated 0 printf d status.widthvalidated 四 工程例項 需求 當前有個32位...

C語言 結構體與位段(四) 關於位段

關於位段的基本形式 struct s 那麼,大家可以感覺到他和結構體唯一的不同點 好像就是冒號和後面的數字 那麼這是什麼意思呢?我們來求一下這個結構體的大小 詳情見第三章 記憶體對齊現象 struct s 是不是4 4 16 個位元組啊?是對的結構體這麼表示是16個位元組 但是當表示位段,不同點是,...