【C语言进阶】结构体类型(位段)

目录

1. 什么是位段

2. 位段的大小

2.1 计算 int 位段大小

2.2 计算 char 位段大小

3. 位段的跨平台问题


1. 什么是位段

  • 基本上都是相同类型,要么全是int,要么全是char
  • 经过观察,char也可以
  • 但是需要整型家族,char 是 ASCII 码
  • 后面的数字不能大于 32

例如:S 就是一个位段

 

2. 位段的大小

位段:二进制位、节省内存空间

某些数据的值,不会特别大,或者只有几种状态,就用位段节省内存消耗

位段开辟空间:

  • 首先需要整型家族才能创建位段成员,一般如果是 int 类型,就全是 int
  • 开辟空间按照位段成员,int 就开辟 4个字节,char 开辟一个字节
  • 位段的标准没有规定,比如剩余空间是否浪费、从右向左还是向右等等,所以位段不能跨平台

2.1 计算 int 位段大小

计算大小:8字节

  1. 先根据位段成员int,创建一个 4 字节的空间
  2. 从右向左使用,a占两个比特位,b占5个比特位,c占10个比特位
  3. 由于剩下的不够存放d,所以剩余空间浪费
  4. 创建新的 4 字节空间,从右向左存放d的30个比特位
  5. 所以位段成员后面的数字不能大于32

2.2 计算 char 位段大小

计算大小:3 字节

  1. 先根据位段成员char,创建一个 1 字节的空间
  2. 从右向左使用,a占三个比特位,b占四个比特位
  3. 由于剩下的不够存放c,所以剩余空间浪费
  4. 创建新的 1 字节空间,从右向左存放c的5个比特位
  5. 然后浪费剩余空间,创建1字节存放d的4个比特位
  6. 所以位段成员后面的数字不能大于32

3. 位段的跨平台问题

1.最高位的1是有符号还是无符号的不确定

2.位段最大的数目不确定

3.位段从右向左,还是从左向右不确定

4.剩余的空间是浪费还是接着利用不确定

  • 总结:所以,位段和结构体相比。位段能实现结构体的功能,并且可以有效的节省空间,但是存在跨平台的问题

位段使用的例子:

TCP/IP协议,在网络中有效使用

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听风吹等浪起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值