位段
信息的存取一般以字節爲單位。實際上,有時存儲一個信息不必用一個或多個字節,例如,“真”或“假”用0或1表示,只需1位即可。在計算機用於過程控制、參數檢測或數據通信領域時,控制信息往往只佔一個字節中的一個或幾個二進制位,常常在一個字節中放幾個信息。
怎樣向一個字節中的一個或幾個二進制位賦值和改變它的值呢?可以用以下兩種方法:
(1)可以人爲地將一個整型變量data分爲幾部分。
但是用這種方法給一個字節中某幾位賦值太麻煩。可以位段結構體的方法。
(2)位段
程序如下:
struct packed-data
{unsigned a:2;
unsigned b:6;
unsigned c:4;
unsigned d:4;
int i;
}data;
(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) 位段可以在數值表達式中引用,它會被系統自動地轉換成整型數。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.