栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【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协议,在网络中有效使用

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873295.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号