有时我们存储信息时并不需要用到一个完整的字节,而只需要几个二进制位。C语言提供了一种数据结构,称为位域(位段)用于这种情况。
定义:
struct name{
类型名 位域名:位域长度; // 位域长度不能大于8(即一个字节)
};
注意:
一个位域必须存储在同一个字节中,当有两个连续的位域,在一个字节中存放第一个位域后剩下的空间不足以存放第二个位域,则第二个位域将存放在一个新的字节中,前一个字节多余的未补0
struct bits{
int a:4; // 第一个字节
int b:5; // 第二个字节
};
我们也可以显式使得某个位域存放在一个新的字节中,即使用空域
struct bits{
int a:4; // 第一个字节
int :0; // 空域
int b:2; // 第二个字节
};
当一个位域无位域名时,它只是用来作为填充或调整位置,不能被使用(int :4 仅仅是用来占4位)
位域变量的说明
与结构变量说明的方式相同。 可采用先定义后说明,同时定义说明或者直接说明这三种方式。例如:
struct bits{
int a:8;
int b:2;
int c:6;
}data;
说明data为bits变量,共占2个字节。其中位域a占8位,位域b占2位,位域c占6位。
空域大小
空域所占大小和 a的类型及空域的类型二者皆相关。