一、位域的定义
位域是把一个字节中的二进制位划分为几个不同的区域,并说明每个区域的位数。每个区域都有一个域名,允许
在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位来表示。
形式:
struct 位域结构名
{
类型说明符 位域名:位域长度;
类型说明符 位域名:位域长度;
. . . . . .
};
例如:
struct data
{
unsigned int a : 2 ;
unsigned int b : 3 ;
unsigned int c : 3 ;
} ;
注意:
(1)位域必须存储在同一个字节中,不能跨两个字节。
例如:
struct data
{
unsigned int a : 2 ;
unsigned int b : 4;
unsigned int c : 3 ;
} ;
这种情况是不允许的。
当一个字节所剩的空间不足以存放另一个位域时,应当从下一个字节起存放该位域。
解决方案:
struct data
{
unsigned int a : 2 ;
unsigned int b : 4 ;
unsigned int : 0 ; //空域
unsigned int c : 3;
} ;
a占用第一个字节的2位,b占用第一个字节的4位,第一个字节剩下的2位用0填充,表示不用。
c会从第二个字节开始存储。
(2)位域所占的位数不能超过8个二进制位
(3)允许位域无域名
无域名的位域是不能使用的。
二、位域变量的声明
(1)先定义位域类型,再定义变量
struct 位域结构名
{
类型说明符 位域名:位域长度;
. . . . . .
};
struct 位域结构名 变量名;
(2)在定义位域类型的同时,定义变量
struct 位域结构名
{
类型说明符 位域名:位域长度;
. . . . . .
}变量名;
(3)直接定义位域类型的变量
struct
{
类型说明符 位域名:位域长度;
. . . . . .
}变量名;
由于位域没有位域结构名,所以在程序的其他地方不能继续声明变量。通常用于函数内部。
三、位域变量的使用
形式:
位域变量名 . 位域名;
大部分的位域程序,都有位运算。