位域又叫位结构,位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构比按位运算符更加方便,位域多用于结构体中,在操作系统底层代码使用较多。

位结构定义的一般形式为:

     struct位结构名{ 
                数据类型 变量名: 整型常数; 
                数据类型 变量名: 整型常数; 
     } 位结构变量; 

其中: 数据类型必须是int(unsigned或signed)。 整型常数必须是非负的整 数, 范围是0~15, 表示二进制位的个数, 即表示有多少位。

变量名是选择项, 可以不命名, 这样规定是为了排列需要,例如: 下面定义了一个位结构。


     struct{ 
          unsigned incon: 8;  /*incon占用低字节的0~7共8位*/ 
          unsigned txcolor: 4;/*txcolor占用高字节的0~3位共4位*/ 
          unsigned bgcolor: 3;/*bgcolor占用高字节的4~6位共3位*/ 
          unsigned blink: 1;  /*blink占用高字节的第7位*/ 
     }ch; 

位结构成员的访问与结构成员的访问相同。
例如: 访问上例位结构中的bgcolor成员可写成:

ch.bgcolor

如:

#include 
struct Node
{
 int a:5;
 int b:8;
 int c:19;
};
int main(int argc, char *argv[])
{
 struct Node a;

 printf("%d",sizeof(a));
 return 0;
}

输出结果:4

如果去掉位域

#include 
struct Node
{
 int a;
 int b;
 int c;
};
int main(int argc, char *argv[])
{
 struct Node a;

 printf("%d",sizeof(a));
 return 0;
}

输出结果:12