C/C++位域结构体
作用
某些信息的存储表示只需要几个bit位就可以表示,
为了节省存储空间,位域就出现了。
格式
struct 位域结构名
{
位域列表1;
位域列表2;
...
};
位域列表的形式为:
类型说明符 位域名:位域长度;
(无位域名,表示仅占位)
如:
struct {
char c1 : 3;
char c2 : 2;
char c3 : 2;
}s1;
//sizeof=1
规则
一个位域必须存储在同一个字节中,不能跨两个字节
尺寸计算(x86下)
struct {
char c1 : 3;
char c2 : 2;
char c3 : 2;
}s1;
//sizeof=1
说明:char 占一个字节共8位,3+2+2=7;故sizeof(s1)=1。
struct {
char c1 : 3;
char c2 : 3;
char c3 : 3;
}s2;
//sizeof=2
说明:char 占一个字节共8位,3+2+3>8;故sizeof(s2)=2。
struct {
int a : 2;
int b : 4;
char c;
}s3;
//sizeof=8
说明:int 占四个字节共32位,2+4<32;故a,b占四个字节,c占一个字节,
结构体字节对齐(按四个字节对齐),故sizeof(s3