当前位置: 首页 > news >正文

c语言位段知识详解

 

本篇文章带来位段相关知识详细讲解!

如果您觉得文章不错,期待你的一键三连哦,你的鼓励是我创作的动力之源,让我们一起加油,一起奔跑,让我们顶峰相见!!!

目录

一.什么是位段

二.位段的内存分配

 位段的好处

三.位段的跨平台问题

四.位段的应用


一.什么是位段

位段的声明和结构是类似的,有两个不同:
1.位段的成员必须是 int、unsigned int 或signed int 
2.位段的成员名后边有一个冒号和一个数字
其中:后面的数字表示冒号前面成员所占多少个比特位;

比如:

A就是一个位段类型
那位段A的大小是多少?
这个就要引出 位段的内存分配这个问题了;

二.位段的内存分配

1. 位段的成员可以是 int unsigned int signed int 或者是 char (属于整形家族)类型;
2. 位段的空间上是按照需要以4个字节( int )或者1个字节( char )的方式来开辟的;
3. 位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位端;
例如:

分析内存分配: 

 根据上面的分析:struct S  所占内存位3个字节

并且在内存中观察应该为:620304

通过代码运行验证:

 

根据验证:我们分析是正确的;

 位段的好处

当一个变量的取值范围是0~3是,只需要用两个比特位就可以表示,就不需要给它一个整型的大小,这样就可以节省空间;

三.位段的跨平台问题

1. int 位段被当成有符号数还是无符号数是不确定的。
2. 位段中最大位的数目不能确定。(16位机器最大16,32位机器最大32,写成27,在16位机
器会出问题。
3. 位段中的成员在内存中从左向右分配,还是从右向左分配标准尚未定义。
4. 当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是
舍弃剩余的位还是利用,这是不确定的

总结:
跟结构相比,位段可以达到同样的效果,并且可以很好的节省空间,但是有跨平台的问题存在

四.位段的应用

应用:IP数据包格式 

本章完~


http://www.lryc.cn/news/101390.html

相关文章:

  • FFmpeg aresample_swr_opts的解析
  • CAN学习笔记3:STM32 CAN控制器介绍
  • 软工导论知识框架(二)结构化的需求分析
  • [SQL挖掘机] - 算术函数 - abs
  • vue拼接html点击事件不生效
  • 【Spring】Spring之依赖注入源码解析
  • 【微软知识】微软相关技术知识分享
  • 12.python设计模式【观察者模式】
  • 重生之我要学C++第五天
  • 复习之linux高级存储管理
  • HuggingGPT Solving AI Tasks with ChatGPT and its Friends in Hugging Face
  • java工程重写jar包中class类覆盖问题
  • Mybatis基于注解与XML开发
  • 数字化转型导师坚鹏:数字化时代扩大内需的8大具体建议
  • M1/M2 通过VM Fusion安装Win11 ARM,解决联网和文件传输
  • Linux中显示系统正在运行的进程的命令
  • vite中安装less
  • Aduino中eps环境搭建
  • python——案例二 求两个数的和
  • 一文了解 Android 车机如何处理中控的旋钮输入?
  • 小红书推广 方法总结
  • 通讯录的实现(超详细)——C语言(进阶)
  • 3D 渲染技巧-如何创建高质量写实渲染?
  • fastadmin采坑之获取当前登录admin用户的信息
  • 【Spring AOP + 自定义注解 + 动态数据源 实现主从库切换读写分离】—— 案例实战
  • 【LeetCode每日一题合集】2023.7.24-2023.7.30
  • 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(14)-Fiddler断点(breakpoints)实战,篡改或伪造数据
  • ELK + Fliebeat + Kafka日志系统
  • Scaling Instruction-Finetuned Language Models
  • rust 闭包函数