1.位段的定义:
位段是定义结构体(或联合体)中的成员变量所占的空间,单位是bit。含有位段的结构体(联合体)称为位段结构。
2.位段的意义:
能够节省空间。比如性别,2个bit位可以表示2^2=4种可能性,不需要一个整形32个bit位。
3.位段相对于结构体的限制:
位段的声明跟结构体相比,有两个限制:
1.位段的成员必须是整形家族的,如int,unsigned int或signed int或char类型的,因此位段大小必须<=32bit
2.位段的成员名后边有一个冒号和一个数字
4.位段的内存分配:
1.位段在内存空间上是按照需要以4个字节(int)或者1个字节(char)的方式来开辟的。
2.位段设计很多不确定的因素,位段是不跨平台的,注重可移植的程序应该避免使用段位
位段举例,如:
struct S
{
char a : 3; //a成员占3个比特位
char b : 4; //b成员占4个比特位
char c : 5; //c成员占5个比特位
char d : 4; //d成员占4个比特位
};
int main()
{
struct S s = { 0 };
s.a = 10;
s.b = 12;
s.c = 3;
s.d = 4;
return 0;
}
结构体变量s的成员bit位使用:
a占3个bit位,但10的二进制有4个bit位1010,要存入3个bit位,低3位存入010,高1位丢弃
b占4个bit位,12的二进制有4个bit位1100,刚好可以存入4个bit位
c占5个bit位,3的二进制有2个bit位11,可以存入5个bit位
d占4个bit位,4的二进制有3个bit位100,可以存入4个bit位
![](https://img-blog.csdnimg.cn/90807dfe384f4766afe434c8d7fc27de.png)
使用VS2019编译,F10调试,监视内存,输入&s,内存中存入的就是62 03 04
![](https://img-blog.csdnimg.cn/8797e84f9c0447e3836eba882fab3113.png)