目录
一、什么是位域
//为了操作寄存器中某些位而引入位域
在定义结构体类型时,成员变量最小类型是char,占1个字节,但是后时候需要定义一个成员只占几个二进制位,此时需要使用位域定义成员。
二、如何定义位域
* 位域:
* 1,空间单位---定义的数据类型的长度为一个空间单位,计算机每次按空间单位分配空间
* 2,每一个位域变量,空间不能跨两个空间单位,如果一个空间单位剩余的空间不够分配,则在下一个ie空间单位中分配。
* */
struct A{
unsigned char a:2; //位域成员按位分配内存空间,a占2位,b占3位
unsigned char b:3;
};
struct B{
unsigned short a:10;
unsigned short b:7;
};
struct C{
unsigned char a:3;
unsigned char :0; //0表示占位:将当前空间单位剩余的位全部占用
unsigned char b:4;
};
struct D{
unsigned char a:3;
unsigned char :2; //表示占位,占a后面的2位
unsigned char b:2;
unsigned char c:2;
};
struct E{
unsigned char a:5;
unsigned short b:14; //以大类型为空间单位分配内存
};
int main(void)
{
int len;
struct A sa;
len = sizeof(struct A);
printf("len = %d\n",len);
sa.a = 3;
sa.b = 5;
printf("sa.a = %hhd\n",sa.a);
printf("sa.b = %hhd\n",sa.b);
len = sizeof(struct B);
printf("len = %d\n",len);
len = sizeof(struct C);
printf("len = %d\n",len);
len = sizeof(struct D);
printf("len = %d\n",len);
len = sizeof(struct E);
printf("len = %d\n",len);
return 0;
}