原创 位域与共用体

2009-7-13 15:11 2254 2 2 分类: MCU/ 嵌入式

 


作者:曹忠明,华清远见嵌入式学院讲师。


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

文章评论0条评论)

登录后参与讨论
我要评论
0
2
关闭 站长推荐上一条 /2 下一条