位域

位域

引入

有些信息在储存时,并不需要占用一个完整的字节,而只需占几个或一个二进制位,例如存放一个开关常量,只有0和1两种状态,用一个二进制位即可满足要求,无需浪费空间,并且可以使处理更加简便,所以C语言提供了一种数据结构,成为位域(或位段)。这样就可以把几个不同的对象用一个字节的二进制位域来表示。所谓“位域”就是是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。

案例

struct temp

{
int a:8;
int b:2;
int c:6;
}data;
//在上面的代码中,data占2个字节(16位)。

特性1

一个位域必须存储在同一个字节中,不能跨两个字节。如果一个字节所剩空间不够存放另一个位域时,应从下一单元起存放该位域。

struct temp

{
int a:5;
int b:5;
int c:5;
}data;
//以上三个位域都各自占据一个字节的5位

特性2

可以有意使某位域从下一单元开始。(方法:使用一个空位域在这之前)

struct temp

{
char a:4
char :0 //空域
char b:4 //从下一单元开始存放
char c:4
}
//其中,a占第一个字节的4位,后4位填零不用,b从第二个字节开始,占4位,c占剩下4位。

特性3

位域可以无位域名,这时它只用来作填充或调整位置。无名的位域是不能使用的。

struct temp

{
char a:4
char :2 //空域
char b:4 //从下一单元开始存放
char c:4
}