什么是位域
有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,只有 0 和 1 两种状态,用 1 位二进位即可。为了节省存储空间,并使处理简便,C 语言又提供了一种数据结构,称为"位域"或"位段"。
所谓"位域"是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。
典型的实例
用 1 位二进位存放一个开关量时,只有 0 和 1 两种状态。
读取外部文件格式——可以读取非标准的文件格式。例如:9 位的整数。
位域的定义
位域定义与结构定义相仿,其形式为:
struct 位域结构名
{
type [member_name] : width ; //位域列表
};
type:只能为 int、unsigned int、signed int三种类型。
member_name:位域的名称。
width:位域中位的数量。宽度必须小于或等于指定类型的位宽度。
位域示例
位域可以存储多于 1 位的数,例如,需要一个变量来存储从 0 到 7 的值,您可以定义一个宽度为 3 位的位域,如下:
示例1
struct bs
{
int a:8;
int b:2;
int c:6;
}data;
data 为 bs 变量,共占两个字节。其中位域 a 占 8 位,位域 b 占 2 位,位域 c 占 6 位。
示例2
typedef enum STdef
{
NO=0,
YES=1
}STdef;
typedef union
{
u8 BYTE;
struct
{
STdef SV14:1;
STdef SV23:1;
STdef SV24:1;
}BIT;
}LEAK_ST_DEF;