目录
什么是位段
位段的声明和结构体是类似的
但有两个不同:
1. 位段的成员必须是整型家族: int(整型) ,unsigend int (无符号整型),sigend int(有符号整型), char(字符类型)
2. 位段的成员名后有一个冒号和数字
代码演示:
struct S
{
int _a : 2;
int _b : 5;
int _c : 10;
int _d : 20;
};
S 就是一个位段类型
位段的内存分配
了解位段的意义:
当一个结构体变量只用表示出 1 ,2 ,3 时,就不用开辟那么多的空间,这时这个变量就可以使用位段来控制开辟的空间大小
了解位段分配规则:
位段在空间上是按照每次开辟 4 个字节或者 1 个字节的方式开辟的,当超出 4 个字节或者 1个字节时,就会追加 4 个或 1 个字节
注意:
位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序中应该避免使用位段
计算结构体 S 的总大小:
所以以上结构体 S 的总大小为:8字节;因为位段后的 _a ,_b ,_c ,_d 一共 38 个bit位,超出了第一次开辟的4个字节(每个字节8个bit),所以要追加 4 个字节,所以结果是 8 字节
计算结构体 S 的总大小验证: