1.位域
位域是指信息在
存储
时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省
存储空间
,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“
位段
”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。(摘自百度百科)
2.结构体位域的使用
struct BITETEST
{
unsigned short a : 4;
unsigned short b : 5;
unsigned short c : 7;
}BITETEST;
{
unsigned short a : 4;
unsigned short b : 5;
unsigned short c : 7;
}BITETEST;
说明:与结构体定义类似,只是在定义之后添加所占用的位数,用冒号标识。
3.具体实例
void main(void)
{
int i;
{
int i;
BITETEST test;
test.a=2;
test.b=3;
test.c=0;
i=*((short *)&test);
printf("%d ",i);
}
test.a=2;
test.b=3;
test.c=0;
i=*((short *)&test);
printf("%d ",i);
}
解析:
首先按照上面位域的排列,获取整个字节的值:
值 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
test.a | 0 | 0 | 1 | 0 | ||||||||||||
test.b | 0 | 0 | 0 | 1 | 1 | |||||||||||
test.c | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
在执行i=*((short *)&test); 时,取从地址&test开始两个字节(short占两个字节)的内容转化为short型数据,即为0x0032,再转为int型为0x00000032,即50。输出的结果就是50