目录
1.位段的形貌
先看以下两段代码:左边是结构体,右边就是我们要讲解的位段。可以看出位段和结构体是非常类似的,但是位段多了冒号和其后的数字。
2.位段的声明
位段的声明和结构是类似的,有两个不同:
1.位段的成员必须是int ,unsigned int, signed int 或者是 char (属于整形家族)类型。
2.位段的成员名后边有一个冒号和一个数字。
3.位段的内存分配
先按照结构体的内存对齐来计算一下S1的大小:如图占8个字节。
而位段的大小,计算又有所不同
1.位段成员后的数字表示了其所占的大小,单位是比特
2. 位段的空间上是按照需要以4个字节( int )或者1个字节( char )的方式来开辟的,即每次开辟一个字节或四个字节。
讲解:首先记住数字的单位是比特,第一个成员a2是三个比特位,此时向内存申请1个字节,要注意,(在vs中)此时这8个比特位是先用后面3个比特位(有点类似小端存储)。第二个成员b2要占4个比特位,而刚刚申请的1个字节还剩余5个比特位,刚好放下。第三个成员c2要用6个比特位,刚才那一个字节只剩余一个比特位,不够用,则会再向空间申请4个字节(要看类型申请char申请1个字节,int申请4个字节),只用掉这个4字节的6个比特位。所以S2共占个5字节。
4.注意事项
1.位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段。
2. 位段中最大位的数目不能确定。(16位机器最大16,32位机器最大32,写成27,在16位机
器会出问题。
3. 位段中的成员在内存中从左向右分配,还是从右向左分配标准尚未定义。
ok,位段的讲解就是这些了,如果觉得可以的话请务必点个赞吧!