目录
1. 什么是位段
- 基本上都是相同类型,要么全是int,要么全是char
- 经过观察,char也可以
- 但是需要整型家族,char 是 ASCII 码
- 后面的数字不能大于 32
例如:S 就是一个位段
2. 位段的大小
位段:二进制位、节省内存空间
某些数据的值,不会特别大,或者只有几种状态,就用位段节省内存消耗
位段开辟空间:
- 首先需要整型家族才能创建位段成员,一般如果是 int 类型,就全是 int
- 开辟空间按照位段成员,int 就开辟 4个字节,char 开辟一个字节
- 位段的标准没有规定,比如剩余空间是否浪费、从右向左还是向右等等,所以位段不能跨平台
2.1 计算 int 位段大小
计算大小:8字节
- 先根据位段成员int,创建一个 4 字节的空间
- 从右向左使用,a占两个比特位,b占5个比特位,c占10个比特位
- 由于剩下的不够存放d,所以剩余空间浪费
- 创建新的 4 字节空间,从右向左存放d的30个比特位
- 所以位段成员后面的数字不能大于32
2.2 计算 char 位段大小
计算大小:3 字节
- 先根据位段成员char,创建一个 1 字节的空间
- 从右向左使用,a占三个比特位,b占四个比特位
- 由于剩下的不够存放c,所以剩余空间浪费
- 创建新的 1 字节空间,从右向左存放c的5个比特位
- 然后浪费剩余空间,创建1字节存放d的4个比特位
- 所以位段成员后面的数字不能大于32
3. 位段的跨平台问题
1.最高位的1是有符号还是无符号的不确定
2.位段最大的数目不确定
3.位段从右向左,还是从左向右不确定
4.剩余的空间是浪费还是接着利用不确定
- 总结:所以,位段和结构体相比。位段能实现结构体的功能,并且可以有效的节省空间,但是存在跨平台的问题
位段使用的例子:
TCP/IP协议,在网络中有效使用