位域
有些信息在存储时,并不需要占用一个完整的字节,而只需占用几个或一个二进制位。如在存放一个开关量时,只有0和1两种状态,用1位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为”位域“。
所谓”位域“,就是把一个字节中的二进制位划分为几个不同的区域,并说明每个区域的位数,每个域都有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。位域的定义和位域变量的定义形式为:
struct 位域结构名
{
类型说明符 位域名1:位域长度;
类型说明符 位域名2:位域长度;
......
类型说明符 位域名n:位域长度;
};
比如:需要表示两个3位的二进制数和一个2位的二进制数,则可以用一个8位的字符表示,如下:
struct
{
char a:3;
char b:3;
char c:2;
};
可以看到这个结构体所占用的空间位一个字节(8位),节省了空间,
位域的说明与结构变量说明的方式相同,可以采用先定义后说明、同时定义说明或者直接说明这3种方式。使用位域时应注意:
1.一个位域必须存储在同一个字节中,不能跨两个字节。
2.位域的长度不能大于一个字节的长度,也就是说不能超过8位。
3.可以定义无名位域,这时它只能用来做填充或调整位置,无名位域在程序中是不能使用的。