-
位字段
鎖定
- 中文名
- 位字段
- 外文名
- bit field
- 性 質
- 科學
- 類 別
- 計算機
位字段用途
它主要用於一些使用空間很寶貴的程序設計中,如嵌入式程序設計。
位字段用法
看如下位字段的定義:
typedef struct bit_field { unsigned int a : 5; unsigned int b : 3; unsigned int c : 20; unsigned int d : 4; } bit_field_s;
在如上定義中,bit_field_s結構體只佔用一個DWORD的空間,即4個字節。其中成員a佔用5位,成員b佔用3位,成員c佔用20位,成員d佔用4位。我們可以對bit_field_s結構體的成員進行如下賦值:
bit_field_s x; x.a = 4; x.b = 7; x.c = 1024; x.d = 13;
在定義位字段時還可以不指定成員的名稱,看如下定義:
typedef struct bit_field { unsigned int a : 5; unsigned int b : 3; unsigned int c : 20; unsigned int : 4; } bit_field_s;
在如上定義中,最後一個成員只是用於佔位,使結構體按DWORD對齊。而如下定義就和上面的定義是一樣的效果:
typedef struct bit_field { unsigned int a : 5; unsigned int b : 3; unsigned int c : 20; unsigned int : 0; } bit_field_s;
最後一個成員的0位寬度用於強制結構體按DWORD對齊。
位字段注意
其實,我們完全可以用位操作來實現位字段的功能,它們在編譯後的代碼與效率上是一樣的。
例如:設置bits的5-9位為value
+++ 位操作 +++
unsigned int bits; bits &= ~(0x1f<<5) /* 將5-9位設置為0 */ bits |= value<<5 /* 設置5-9位的值 */
+++ 位字段 +++
struct { unsigned int a : 5; unsigned int b : 5; unsigned int c : 22; } bits; bits.b = value;
++++++++++++
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:14次歷史版本
- 最近更新: 你饿嘛i