C语言提供了“位域”或者称为“位段”这种结构体,将一个字节中的二进制位划分为几个部分,每个域有一个域名,可以通过这个域名对对应的位进行操作。其定义域说明和使用语结构体相似,为:
struct 位域结构名{
<位域列表>
};
位域列表如下;
struct data{
unsigned int a:2;
unsigned int b:3;
unsigned int c:3;
};
其中a表示data的低两位,表示data的3~5为,c表示data的6~8位。
在C语言中,不同的成员使用共同的存储区域的数据构造类型称为共用体,简称共用,又称联合体。共用体占用空间的大小取决于类型长度最大的成员。共用体在定义、说明和使用形式上与结构体相似。
定义一个共用体类型的一般形式为:
union 共用体名
{
<成员表列>;
};
看一个具体的例子:
union un
{
char c;
short s;
int i;
}myun;
将共用体和位域结合起来,如下
#include
union{
struct{
unsigned int x1:2;
unsigned int x2:3;
unsigned int x3:3;
}x;
char y;
}data;
int main()
{
data.x.x1=3;
data.x.x2=4;
data.x.x3=5;
printf(“%d \n”,data.y);
return 0;
}
通过结果可以看出,这个过程相当于为data.y按二进制位赋值。可以更加方便的对其进行操作。
|