位域与共用体

[复制链接]
2364|5
 楼主| dfsa 发表于 2011-7-20 22:32 | 显示全部楼层 |阅读模式
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按二进制位赋值。可以更加方便的对其进行操作。
杜_U_ME 发表于 2011-7-21 01:15 | 显示全部楼层
受教了
黑发尤物 发表于 2011-7-21 22:11 | 显示全部楼层
收藏了
黑发尤物 发表于 2011-7-25 17:24 | 显示全部楼层
学习了
金鱼木鱼 发表于 2011-7-29 18:10 | 显示全部楼层
懂了,不错
wanga87 发表于 2012-11-6 15:53 | 显示全部楼层
这个我有看过!一开始我还用强制类型转换呢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

282

主题

2404

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部