结构体补充-位段

news2024/11/24 17:15:50

文章目录

  • 位段介绍
  • 位段内存分配
  • 位段的使用注意事项
  • 结束

位段介绍

为什么会有位段呢?

我们直到一个int是4个字节表示32个bit位,但是比如2,3这样的整数,我们只需要2个bit位就可以了,那30个比特位不就是浪费掉了吗,所以位段就产生了

位段通过结构体来实现,位段表示方法如下

1.位段只能是整形家族,例如int,unsigned int,char等等来表示
2.位段中间有一个冒号和一个数字

在这里插入图片描述

位段内存分配

在这里插入图片描述

那struct A的大小是多少呢?是不是简单的把后面的bit位数相加起来呢?

1.位段每次使用的空间都是直接开辟4(int)个字节或者一个字节(char)
2.位段有很多不确定因素,位段是不跨平台的,注重可移植程序应避免使用位段
在这里插入图片描述
正因为它从左边用还是从右边用,舍不舍弃这时不确定的,C语言标准并没有明确的规定出来,具体怎么用全看编译器是如何实现的。
,所以位段有很多不确定因素。而早期计算机可能是16位操作系统,那它的int类型就是2个字节,如果我们位段在x86与x64环境下为4个字节,如果我们定义了 int _a : 30,这样30个bit的位段,直接把代码移植过去,代码都运行不了,所以这也是为什么位段是不跨平台的原因。
在这里插入图片描述
举个例子验证一下,如果真的是从右边开始使用,不够的直接丢弃的话,下图的结果应为:0X230A0C(内存16进制存储)
在这里插入图片描述

在这里插入图片描述

位段的使用注意事项

由于位段是控制bit位的,而我们内存最小的单位都是字节,如果此时位段的成员在一个字节内,而不是起始位置,那么此时是没有地址的,所以位段的成员赋值我们就不能使用scanf,并且位段没有&操作,而应把值存储的一个变量中再赋值给位段,或者直接给位段赋值

在这里插入图片描述

结束

位段相当于对我前面结构体知识的补充

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1672101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

几个简单操作,让3dmax渲染速度起飞‼️

3dmax渲染慢原因: 场景复杂度:场景中模型、材质、纹理和贴图的复杂性增加渲染时间。优化场景,使用简化模型和材质可提高速度。 高质量设置:高级渲染效果如光线追踪、全局照明等增加计算量。适当降低设置,如减少分辨率…

JDK的串行收集器介绍与优化指南-02

对象的生命周期 对象的生命周期 在Java中,对象的生命周期通常包括以下几个阶段,这些阶段与JVM的内存管理和垃圾收集机制密切相关。 创建阶段 (1)为对象分配存储空间:当使用new关键字或其他方式(如反射、克隆、反序列化等)创建一个对象时,JVM首先会在堆内存中为其分配…

网络安全----小程序渗透测试反编译审计漏洞

一、什么是反编译审计漏洞 微信小程序反编译渗透测试是一种针对微信小程序的安全测试方法,是在通过对小程序源代码的反编译和分析,发现潜在的安全漏洞,并对其进行渗透测试以验证其安全性的一种方法。 二、测试流程及其步骤 反编译小程序&a…

【opencv】图像处理(一)

实验环境:anaconda、jupyter notebook 实验用到的包:numpy,matplotlib,opencv 一、opencv安装 最好使用python3.6(我之前用的3.9安装opencv3.4.1.15会失败) conda create -n cv python3.6安装opencv3.4.1.15(3.4.2版…

[C语言知识]return和exit到底有什么区别?

前言 💖💖💖欢迎来到我的博客,我是anmory💖💖💖 又和大家见面了 欢迎来到C语言知识系列 用通俗易懂的语言让编程语言不再困难 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭…

windows版本达梦数据复制软件 DMDRS安装

安装步骤: 1: 2:注意安装提醒 3:接受 4:选择安装路径,注意权限以及所需空间大小 5:观察支持的数据源类型

2024审计师报名流程图解❗报名时间汇总❗

2024年审计专业技术资格考试报名正在进行中 🔍审计报名流程 一、考生注册 打开浏览器登录中国人事考试网进行【考生注册】,按照提示认真填写个人注册信息,确保个人信息真实、完整、准确,并上传已处理好的照片。 二、考生报名 1⃣考…

计算机毕业设计springboot体育馆场地预约管理系统【附源码】

计算机毕业设计springboot体育馆场地预约管理系统[附源码] 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制…

ue5地编模块学习记录

ue5网站功能3d溜溜网下载模型https://anyconv.com/max-to-fbx-converter/3dmax转换fbx模型解决问题记录 一、光源 搜索光源搜索不到的时候可以点击 窗口> 对场景内的光照进行处理 二、认识节点 在UE5中,Depth Fade节点通常用于在材质中实现深度淡化效果&#…

element ui输入框后面带输入的字符数量

使用el-input的属性&#xff1a; maxlength&#xff1a;最长字符限制&#xff1b; show-word-limit&#xff1a;显示输入字符数量&#xff1b; 例&#xff1a; <el-input v-model"title" placeholder"请输入名称" maxlength"200" show-wor…

kafka 图形化

介绍 idea 中的一个插件 kafkalytic,kafka 图形化 简单又强大 安装 使用界面 总体信息 数据查看

基于Java的qq截图工具参考论文(论文 + 源码)

【免费】基于Java的qq截图工具.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89304179 基于Java的qq截图工具 摘要 当今时代是飞速发展的信息时代&#xff0c;人们在对信息的处理中对图像的处理量与日俱增&#xff0c;这一点在文档人员上显得非常突出。 本软…

【KMP算法最详细讲解】28. 实现 strStr()

实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串&#xff0c;在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在&#xff0c;则返回 -1。 示例 1: 输入: haystack "hello", needle "ll" 输出: 2 示…

《三》菜单栏_工具栏_状态栏动作与实现

上期我们创建了辣么多的动作&#xff0c;那么这次我们要是开始实现这些动作&#xff0c;撸起袖子来吧&#xff1a; //菜单动作&#xff08;ACtion&#xff09;QAction *newAct;//新建QAction *openAct;//打开QAction *saveAct;//保存QAction *saveAsAct;//另存为QAction *prin…

高铁列车班组信息宣传投稿我喜欢上了这个好方法

作为高铁列车班组的一名工作人员,我肩负着对外信息宣传的重任。随着高铁列车的快速发展,我们班组不仅需要提供优质的服务,还需要通过媒体向外界传递我们的声音,展示我们的风采。然而,在投稿的过程中,我经历了一段充满挑战和困惑的时光。 起初,我采用传统的邮箱投稿方式,将精心撰…

TS的快速入门(HarmonyOS学习第一课)

快速入门 学习TypeScript 对于Harmony0s,应用开发至关重要。在Harmonyos 中&#xff0c;主力编程语言为 ArKTS&#xff0c;它是基于 TypeScript 的一种语言&#xff0c;其通过与ArkUI 框架的匹配&#xff0c;拓展了声明式UI和状态管理等能力&#xff0c;使开发者能够以更简洁自…

BMS-HiL系统方案设计

系统集成了业内著名 NI 公司的软硬件平台。 系统设计采用分布式设计模式。主控上位机作为整个实验的管理者主要设计软件交互和 流程管理的业务&#xff1b;下位机主要业务为序列执行与设备调用&#xff0c;各模块详细测试方案如下所示。 系统搭建使用 PXI 系统技术&#xff0c;…

【命名空间】(中北大学-程序设计基础(2))

目录 题目 源码 结果示例 题目 学校的人事部门保存了有关学生的部分数据&#xff08;学号、姓名、年龄、住址&#xff09;&#xff0c;教务部门也保存了学生的另外一些部分数据&#xff08;学号、姓名、性别、成绩&#xff09;&#xff0c;两个部门分别编写了本部门的数据管…

OS复习笔记ch5-4-2

引言 承接上文我们介绍了信号量机制和应用信号量机制实现的进程同步和互斥&#xff0c;这一节我们将围绕一些经典问题对信号量机制展开更深入地探讨。 读者/写者问题 读者/写者问题与我们之前遇到的问题类型不同&#xff0c;它描述的是&#xff1a; 有读者和写者两组进程&am…

分布式版本控制工具git

1 安装Git 在linux上我们建议你用二进制的方式来安装git&#xff0c;可以使用发行版包含的基础软件包管理工具来安装&#xff0c;如果你是 是CentOS或者Fedora的操作系统&#xff0c;可以使用yum命令来安装git&#xff1a; $ sudo yum install git如果你是ubuntu或者是Debian…