本文使用的环境为:VS2019
1.位段的基础知识
位段与结构体类似,不同点为:
①位段的成员必须是整型: int
,unsigned int
, signed int
,char
②位段的成员名后边有一个冒号:
和一个数字。数字代表bit位。
//eg.位段
//位段可以节省空间
struct A
{
int _a : 2;//2个bit
int _b : 5;//5个bit
int _c : 10;//10个bit
int _d : 30;//30个bit
};
2.位段的内存分配
🔵特点:
① 位段的空间上是按照需要以4个字节( int
)或者1个字节(char
)的方式来开辟的
② 位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段。
图解:
(宏观)
(详细)
3.位段的跨平台问题
① int 位段被当成有符号数还是无符号数是不确定的。
② 位段中最大位的数目不能确定。(16位机器最大16,32位机器最大32,写成27,在16位机器会出问题。)
③ 当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是舍弃剩余的位还是利用,这是不确定的。
④ 位段中的成员在内存中从左向右分配,还是从右向左分配标准尚未定义。
4.位段的应用
总结:使用位段有效的节省了空间