Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31878
  • 博文数量: 7
  • 博客积分: 250
  • 博客等级: 二等列兵
  • 技术积分: 82
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-10 08:44
文章分类

全部博文(7)

文章存档

2011年(2)

2008年(5)

我的朋友
最近访客

分类: LINUX

2008-12-23 15:21:10

位域:
    关于位域的目的,用法,定义就不多说了,主要说一下位域的存储问题。
    1.一个位域的大小可以超过一个字节,大小不要超过其声明的类型大小即可:
      如: 
int name:31;
    2.如果相邻位域的类型相同,且其位宽之和小于等于类型的sizeof大小,则两位域放入一个字段存储:
          如:  
             char name1 : 2;
             char name2 : 6; 
     则这2个字段放入一个字节存储, sizeof结果为 1.
       3.如果相邻位域的类型相同,且其位宽之和大于类型的sizeof大小,则第二个位段从下一个对齐开始存储:
          如 :
     char name1 : 5;
             char name2 : 4;
     则这2个字段放入两个字节存储,sizeof结果为 2.
       4.如果相邻位域的类型不同,则这多个位段会存储在类型sizeof大的位段中,如果所有位段大小之和
          小于等于最大类型的sizeof,则可以全部装下,否则,整个位域的存储空间会以最大类型的sizeof长度
          来进行扩充 :
      如 :
        struct str{
            char name1 :1;
    int  name2 :30;
            char name3 :x;
        };
      当 x = 1时, sizeof(str) = 4;
      当 x = 2时, sizeof(str) = 8;
    5.如果你要使用位域,你应该很清楚每个字段的大小,从而有序的安排位域的顺序,最小化总字段空间:
      如 :
       struct str{ struct str{
   char name1 : 4;     char name1 : 4;
   char name2 : 5;     char name3 : 4;
   char name3 : 4;     char name2 : 5;
       }; };
       sizeof(str) = 3; sizeof(str) = 2;

关于空域: 站位域:
struct str{ struct str{
    int name1 : 5;     int name1 : 5;
    int :0;  int :2;
    char name2 : 5;     char name2 : 5;
}; };
sizeof(str) = 8; sizeof(str) = 4;
阅读(2356) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-02-05 23:41:25

C语言里的位段类型不是只能是整型吗???