注:位段涉及很多不确定因素,位段是不具有跨平台性的,注重可移植性的程序避免使用位段
位段的声明
位段的声明和结构是类似的,有两个不同:
1.位段的成员名后边有一个冒号和一个数字
2.位段的成员必须是 int、unsigned int 或 signed int
struct A
{
int _a:2;
int _b:5;
int _c:10;
int _d:30;
};
位段的内存分配
位段的成员可以是 int unsigned int signed int 或者是 char (属于整形家族)类型
位段的空间上是按照需要以 4 个字节( int )或者 1 个字节( char )的方式来开辟的
struct S
{
char a:3;
char b:4;
char c:5;
char d:4;
};
struct S s = {0};
s.a = 10;
s.b = 12;
s.c = 3;
s.d = 4;
struct S //位段S的声明
{
char a:3; //给char类型变量 a 3个bit的空间
char b:4; //给char类型变量 b 4个bit的空间
char c:5; //给char类型变量 c 5个bit的空间
char d:4; //给char类型变量 d 4个bit的空间
};
struct S s = {0}; //定义S类型的结构体变量
s.a = 10; //将10(1010)放入a的空间中,因为a有3个bit位,所以放入2(010)
s.b = 12; //将12(1100)放入b的空间中,因为b有4个bit位,所以放入12(1100)
s.c = 3; //将3(11)放入b的空间中,因为c有5个bit位,所以放入3(00011)
s.d = 4; //将12(1100)放入b的空间中,因为b有4个bit位,所以放入12(1100)
总结
位段结构也是一种结构体类型,只不过其中含有以位为单位定义存储长度的整数类型位段成员。
采用位段结构既节省存储空间,又可方便操作。