结构体补充-位段

文章目录

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

位段介绍

为什么会有位段呢?

我们直到一个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.hqwc.cn/news/695898.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式:基于STM32的RFID访问控制系统

在商业和住宅建筑中,访问控制系统是确保安全的关键组件。使用射频识别(RFID)技术,我们可以创建一个安全、方便的门禁系统。本教程将详细说明如何使用STM32微控制器实现RFID基础的门禁系统,该系统能够控制电子锁并记录访…

WordPress 、Typecho 站点的 MySQL/MariaDB 数据库优化

今天明月给大家分享一下 WordPress 、Typecho 站点的 MySQL/MariaDB 数据库优化,无论你的站点采用是 WordPress 还是 Typecho,都要用到 MySQL/MariaDB 数据库,我们以 MySQL 为主(MariaDB 其实跟 MySQL 基本没啥大的区别&#xff0…

【重大故障】澳大利亚所有大学退休金数据被Google误删除,本地云服务总监被直接解雇

本周Google私有云发生重大故障,在维护UniSuper客户配置,误删除所有数据(包括异地备份数据), 客户最后通过其他供应商备份暂时已经恢复数据,但是系统还处于恢复中。 UniSuper 是一家澳大利亚退休金基金&…

图片转表格的免费软件,这几款值得收藏!

在数字化时代,图片转表格的需求日益增多。无论是工作汇报、数据分析还是学术研究,将图片中的信息转化为表格都能极大地提高工作效率。然而,许多人在面对这一任务时,往往感到无从下手。今天,我将为大家推荐几款免费的图…

react18【实战】tab切换,纯前端列表排序(含 lodash 和 classnames 的安装和使用)

技术要点 动态样式 className{tabItem ${currentType item.value && "active"}}安装 lodash npm i --save lodash使用 lodash 对对象数组排序(不会改变源数组) _.orderBy(dataList, "readNum", "desc")src\De…

5.10.1 Pre-Trained Image Processing Transformer

研究了低级计算机视觉任务(例如去噪、超分辨率和去雨)并开发了一种新的预训练模型,即图像处理变压器(IPT)。利用著名的 ImageNet 基准来生成大量损坏的图像对。 IPT 模型是在这些具有多头和多尾的图像上进行训练的。此…

001.开始进入反应式编程的世界

近年来,响应式编程范式越来越受欢迎,作为一个模型,旨在简化事件驱动应用程序的实现和异步代码的执行。响应式编程专注于更改的传播及其影响——简单地说,就是如何对更改做出反应更改并创建依赖于它们的数据流。 随着Facebook和Tw…

STM32真的是很落后吗?

STM32 真的是很落后吗?这是一个值得探讨的问题。 STM32 是意法半导体(STMicroelectronics)推出的一款 32 位微控制器,它在嵌入式领域有着广泛的应用。虽然我对 Python 的了解有限,无法直接对 STM32 进行深入的比较&am…

IIS 搭建简单的http网站

一.打开IIS功能并安装 等待安装完成即可。 二. 配置网站和设置IP 三.打开目录浏览和设置WebDAV创作规则 四.添加个别文件的mime类型 五.防火墙添加入站规则

【多模态】30、GPT4V_OCR | GPT4V 在 OCR 数据集上效果测评

文章目录 一、背景二、测评2.1 场景文本识别2.2 手写文本识别2.3 手写数学公式识别2.4 图表结构识别(不考虑单元格中的文本内容)2.5 从内容丰富的文档中抽取信息 三、讨论 论文:EXPLORING OCR CAPABILITIES OF GPT-4V(ISION) : A QUANTITATIV…

Linux内核下RAS(Reliability, Availability and Serviceability)功能分析记录

1 简介 Reliability, Availability and Serviceability (RAS) — The Linux Kernel documentation 在服务器 和 卫星等领域,对设备的稳定性要求很高,需要及时的发现并处理软/硬件上的错误。RAS功能可以用来及时的发现硬件上的错误。 RAS功能需要硬件的…

vue3中使用cherry-markdown

附cherry-markdown官网及api使用示例 官网:https://github.com/Tencent/cherry-markdown/blob/main/README.CN.md api:Cherry Markdown API 考虑到复用性,我在插件的基础上做了二次封装,步骤如下: 1.下载 (一定要指定版本0.8.22,否则会报错: [vitel Internal server e…