位域的用法

首先看一個例子:

struct a
{
	int x:1;
	int y:2;
	int z:33;
};

位域的概念

位域是指信息在存儲時,並不需要佔用一個完整的字節, 而只需佔幾個或一個二進制位。例如在存放一個開關量時,只有0和1 兩種狀態, 用一位二進位即可。爲了節省存儲空間,並使處理簡便,C語言又提供了一種數據結構,稱爲“位域”或“位段”。所謂“位域”是把一個字節中的二進位劃分爲幾 個不同的區域, 並說明每個區域的位數。每個域有一個域名,允許在程序中按域名進行操作。 這樣就可以把幾個不同的對象用一個字節的二進制位域來表示。

位域定義的幾點說明

1. 一個位域必須存儲在同一個字節中,不能跨兩個字節。如一個字節所剩空間不夠存放另一位域時,應從下一單元起存放該位域。也可以有意使某位域從下一單元開始。
2. 位域的長度不能大於指定類型固有長度,比如說int的位域長度不能超過32,bool的位域長度不能超過8。例如,在第3行代碼int z:33中,定義整型變量z爲33位,也就是超過了4字節,這是不合法的,會造成越界,所以程序在編譯時就會報錯。
3. 位域可以無位域名,這時它只用來作填充或調整位置。無名的位域是不能使用的。例如:
struct k
{int a:1; int :2; /*該2位不能使用*/ int b:3; int c:2};

位域變量的說明

與結構變量說明的方式相同。 可採用先定義後說明,同時定義說明或者直接說明這三種方式。例如:
struct bs
{int a:8;int b:2;int c:6;}data, *bsp;
說明data爲bs變量,共佔2個字節。其中位域a佔8位,位域b佔2位,位域c佔6位。位域也是可以使用指針的。
賦值不能超過該位域的允許範圍。

發佈了82 篇原創文章 · 獲贊 35 · 訪問量 82萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章