位域与共用体

作者:曾宏安,华清远见嵌入式学院高级讲师。

C语言提供了“位域”或者称为“位段”这种结构体,将一个字节中的二进制位划分为几个部分,每个域有一个域名,可以通过这个域名对对应的位进行操作。其定义域说明和使用语结构体相似,为:

struct 位域结构名{

       <位域列表>

};

位域列表如下;

struct data{

       unsigned int a2

       unsigned int b3

       unsigned int c3

}

其中a表示data的低两位,表示data3~5为,c表示data6~8位。

 

C语言中,不同的成员使用共同的存储区域的数据构造类型称为共用体,简称共用,又称联合体。共用体占用空间的大小取决于类型长度最大的成员。共用体在定义、说明和使用形式上与结构体相似。

定义一个共用体类型的一般形式为:

union 共用体名

{

       <成员表列>

};

看一个具体的例子:

 union  un

 {

    char c

    short s;

    int i

 }myun

 

将共用体和位域结合起来,如下

#include <stdio.h>

 

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按二进制位赋值。可以更加方便的对其进行操作。

你可能感兴趣的:(位域与共用体)