打印

位域与共用体

[复制链接]
1787|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 | 只看该作者
学习了

使用特权

评论回复
5
金鱼木鱼| | 2011-7-29 18:10 | 只看该作者
懂了,不错

使用特权

评论回复
6
wanga87| | 2012-11-6 15:53 | 只看该作者
这个我有看过!一开始我还用强制类型转换呢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

282

主题

2404

帖子

2

粉丝