位域

来源:互联网 发布:rxjava gson解析数组 编辑:程序博客网 时间:2024/06/13 23:50

位域的使用和结构成员的使用相同,其一般形式为: 位域 变量名·位域名 位域允许用各种格式输出。

例如:

      struct 

  {

       char a : 3;

       char b : 3;

       char c : 2;

   } ; 

这个 结构体所占空间为一个字节,8位。节省了空间。

位域的一些使用:
                 1.位域变量仅限整型
          2.位域变量的长度不能够超过其本身类型的长度
          3.如果某一位域要从一个新的类型对齐处开始 可以在前面加一个长度为0的匿名位域 unsigned :0
          4.匿名位域长度不为0时 只起占位的作用
          5.一个位域必须容纳在同一个其类型对齐长度内
例如:

               struct s1 
               { 
               int i: 8; 
               int j: 4; 
               int a: 3; 
               double b; 
               }; 

               struct s2 
               { 
               int i: 8; 
               int j: 4; 
               double b; 
               int a:3; 
               }; 

               printf("sizeof(s1)= %d\n", sizeof(s1)); 
               printf("sizeof(s2)= %d\n", sizeof(s2)); 
               result: 16, 24 
               第一个结构体中,i,j,a共占15个位,不足8个字节,按double 8字节对齐,共16字节

               第二个结构体中,i,j共占12位,不足8字节,按8字节对齐,a也按8字节对齐,加上double共8+8+8=24个字节