c struct結構體分段

2021-08-29 02:50:59 字數 712 閱讀 2953

看**中發現了一段一時間能理解(n年的老司機猜也能猜到了)但是又不太確定的**:

union sid 

struct ;

uint32_t sid_;

};

明顯這段**的意思是game_id_和role_idx_各佔16位,相當於平分了sid_的空間,至於game_id_和role_idx_誰佔高位誰佔地位,實驗得出game_id_佔低位(可能不同的平台因大小端位元組序而不一致,沒有詳細研究)。

structu這種分段的寫法以前讀書的時候好像在**見過,工作的時候很少見到有人這麼用,當然這與特定的業務邏輯場景有關。突然想著這種方式其實還很有用,例如tcp的協議頭裡面就有一些欄位的大小只有幾位,經常是連續的幾個字段共用乙個多個位元組。這種情況下,用struct 分段的寫法就非常有用,而且結構清晰明了。利用位移的方法就顯得不那麼直觀,而且容易出錯。

示例:

typedef struct _bits  bits;

bits bit;

bit.a = 1;

bit.b = 1;

bit.d = 1;

bit.e = 2;

//bit = 43 0x101011

在最上面的**中,結合聯合體的使用,達到將乙個記憶體資料拆分為高位和地位資料部分的目的。高位和地位的使用在標誌量中應用很多,上面的方法不失為一種簡單優雅的方法。

參考:

C struct結構體的用法

struct personperson a,person b 宣告之後直接建立變數 struct person person c 需要的時候建立typedef struct person 這裡 person 不是變數,而是型別名 person person d 也可以通過這種方式建立變數一般情況下結...

C struct結構型別

struct 結構 型別,是一種複雜的資料型別。它可以包含簡單資料型別,也可以包含其他結構型別,以及方法 屬性 索引器等。1 struct結構型別是值型別,這也是與類最重要的區別。2 結構型別可以實現介面,卻無法繼承另外乙個結構。3 結構型別成員,不能被宣告為protected。4 結構型別中,不能...

結構體型別 結構體變數 結構體陣列 結構體指標

問題1 一元錢換為1 2 5分的硬幣,有多少種兌換方?本題要點分析及參 對各種可能情況進行一一測試。這是實現迴圈的一種方式 窮舉法 但實際上只有只有餘額才能兌換成其它面值的硬幣 main 注意換行的控制和每列的對齊 問題3 某鐵路線上有10個站,需要準備多少種客票?main b a 0 p prin...