位段

信息的存取一般以字節爲單位。實際上,有時存儲一個信息不必用一個或多個字節,例如,“真”或“假”用0或1表示,只需1位即可。在計算機用於過程控制、參數檢測或數據通信領域時,控制信息往往只佔一個字節中的一個或幾個二進制位,常常在一個字節中放幾個信息。
怎樣向一個字節中的一個或幾個二進制位賦值和改變它的值呢?可以用以下兩種方法:
(1)可以人爲地將一個整型變量data分爲幾部分。
但是用這種方法給一個字節中某幾位賦值太麻煩。可以位段結構體的方法。
(2)位段
C語言允許在一個結構體中以位爲單位來指定其成員所佔內存長度,這種以位爲單位的成員稱爲“位段”或稱“位域”( bit field) 。利用位段能夠用較少的位數存儲數據。
程序如下:
struct packed-data
{unsigned a:2;
unsigned b:6;
unsigned c:4;
unsigned d:4;
int i;
}data;
目前電腦一般是32位系統,少數64位系統

  目前電腦一般是32位系統,少數64位系統

關於位段的使用說明

(1)位段成員的類型必須指定爲unsigned或int類型。
(2) 若某一位段要從另一個字開始存放,可用以下形式定義:
unsigned a:1;
unsigned b:2;一個存儲單元
unsigned:0;
unsigned c:3;另一存儲單元
a、b、c應連續存放在一個存儲單元中,由於用了長度爲0的位段,其作用是使下一個位段從下一個存儲單元開始存放。因此,只將a、b存儲在一個存儲單元中,c另存在下一個單元(“存儲單元”可能是一個字節,也可能是2個字節,視不同的編譯系統而異)。
(3) 一個位段必須存儲在同一存儲單元中,不能跨兩個單元。如果第一個單元空間不能容納下一個位段,則該空間不用,而從下一個單元起存放該位段。
(4) 可以定義無名位段。
(5) 位段的長度不能大於存儲單元的長度,也不能定義位段數組
(6) 位段可以用整型格式符輸出。
(7) 位段可以在數值表達式中引用,它會被系統自動地轉換成整型數。
發佈了43 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章