union和位域的混合使用
1、union(共用体)
1.1、概述
C 语言中,union是一种数据类型,对比于结构体,结构体中的每个成员都占用独立的内存空间,而联合中所有的成员都共享同一个内存空间。
也就是说,union中的不同成员要表示的是同一个变量的不同数据类型。
1.2、代码
#include <stdio.h>union data{int n;char ch;short m;
};int main(){union data a;printf("%d, %d\n", sizeof(a), sizeof(union data) );a.n = 0x40;printf("%X, %c, %hX\n", a.n, a.ch, a.m);a.ch = '9';printf("%X, %c, %hX\n", a.n, a.ch, a.m);a.m = 0x2059;printf("%X, %c, %hX\n", a.n, a.ch, a.m);a.n = 0x3E25AD54;printf("%X, %c, %hX\n", a.n, a.ch, a.m);return 0;
}

注意:
1、union的存储空间以最大的成员为准,成员定义中最大的是int n,所以为4个字节。
2、图中的ch,n,m共用了4字节的内存空间。(根据大小端不同,存放顺序会不一致)
3、修改其中的一个成员,会覆盖原有数据,而造成其他成员的变化。
2、位域
2.1、概述
在定义结构体时,我们可以指定某个成员变量所占用的二进制位数(Bit)。
- 成员变量的类型限制最大的二进制位数。
- “:”后指定该成员变量所占用的二进制位数。
2.2、代码
struct bit_field {unsigned int a : 1;unsigned int b : 2;unsigned int c : 5;
};
这个结构体有三个成员变量 a、b 和 c,它们分别占用 1 位、2 位、5 位二进制位。
2.3、特殊说明
-
位域成员变量的访问速度并不一定比一般的成员变量快,因为有些编译器不支持单个位域的直接操作,需要先将整个位域读入CPU寄存器中,然后进行各种“位运算”操作。
-
对于位域成员变量,不能取地址运算符(&)对其进行取址操作,因为它们并不按字节对齐,取址操作会得到一个编译错误。
3、混合使用的代码及解释
union
{u16 wDevSta ;struct{unsigned char bRegister:1;unsigned char bONLine:1;unsigned char bReConnect:1;unsigned char bLowBAT:1;unsigned char bConfig:1;unsigned char b5:1;unsigned char b6:1;unsigned char b7:1;unsigned char b8:1;unsigned char b9:1;unsigned char b10:1;unsigned char b11:1;unsigned char b12:1;unsigned char b13:1;unsigned char b14:1;unsigned char b15:1;} ch;
}g_DevStatus;
定义了一个union类型的变量g_DevStatus,包含了一个u16 wDevSta和一个嵌套的结构体成员ch。
在结构体成员ch中,有16个位域变量,每个位域变量都只占用1位,分别用来表示设备的不同状态,取值为0或1。
例如,如果要将设备的bONLine状态设置为1,可以使用以下2种代码:
g_DevStatus.ch.bONLine = 1;
g_DevStatus.wDevSta |= (1<<1);相关文章:
union和位域的混合使用
1、union(共用体) 1.1、概述 C 语言中,union是一种数据类型,对比于结构体,结构体中的每个成员都占用独立的内存空间,而联合中所有的成员都共享同一个内存空间。 也就是说,union中的不同成员要…...
PMP 高项 07-项目质量管理
项目质量管理 概念 质量的基本概念 克劳斯比:符合要求 戴明:低成本条件下可预测的一致性和可靠度,适应市场需要 朱兰:适用性,满足客户需要 国际标准化组织:质量是反映实体(产品、过程或活动等…...
鸿蒙Hi3861学习十一-Huawei LiteOS-M(内存池)
一、简介 LiteOS将内核与内存管理分开实现,操作系统内核仅规定了必要的内存管理函数原型,而不关心这些内存管理函数是如何实现的。 LiteOS内存管理模块管理系统的内存资源,包括:初始化、分配、释放。 不采用C标准库中的内存管理函…...
MySQL原理(七):内存管理和磁盘管理
前言 上一篇介绍了 MySQL 的日志,这一篇将介绍内存管理和磁盘管理相关的内容。 内存管理 MySQL 的数据都是存在磁盘中的,我们要更新一条记录的时候,得先要从磁盘读取该记录,然后在内存中修改这条记录。修改完这条记录后会缓存起…...
【Shell脚本】Linux安装Nginx以及开机自启
目录 一、Linux安装Nginx脚本1、把编写好的安装Nginx脚本放置到nginx.sh文件中2、在检查网络的时候,这里的IP地址,填写的需要安装Nginx服务器的IP地址3、这里的端口号可按照自己的需要进行修改4、安装Nginx脚本 二、Nginx开机自启 一、Linux安装Nginx脚本…...
solidworks三维建模竞赛练习题
solidworks三维建模竞赛练习题:3D01‐ 01 solidworks三维建模竞赛练习题:3D01‐ 02 solidworks三维建模竞赛练习题:3D01‐ 03 solidworks三维建模竞赛练习题:3D01‐ 04 solidworks三维建模竞赛练习题:3D01‐ 05 solidw…...
Redis---订阅和发布
目录 消息系统命令 消息系统 发布/订阅,即 pub/sub,是一种消息通信模式:发布者也称为消息生产者,生产和发送消息到存储系统;订阅者也称为消息消费者,从存储系统接收和消费消息。这个存储系统可以是文件系…...
使用Statsmodel进行假设检验和线性回归
如果你使用 Python 处理数据,你可能听说过 statsmodel 库。Statsmodels 是一个 Python 模块,它提供各种统计模型和函数来探索、分析和可视化数据。该库广泛用于学术研究、金融和数据科学。在本文中,我们将介绍 statsmodel 库的基础知识、如何…...
mac电脑 安装homebrew、nvm、node、nrm
安装homebrew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)brew -v 查看版本号 根据提示。继续执行 不然之后安装nvm报错(Error: Command failed with exit 128: git);例子: g…...
chrome 113 因为策略原因 cookie显示非常隐蔽
难受的要死,找不到cookie,安装老版本还疯狂偷跑我代理的流量更新!!!!!!! 解决方案: 回退112 !!!!࿰…...
Python3 operator 模块
Python3 中的 operator 模块提供了一系列用于操作 Python 内置类型的函数,这些函数可以替代常规的操作符,同时也提供了一些额外的功能。下面是 operator 模块中的一些常用函数及其作用: 1. operator.add(a, b):返回 a 和 b 的和&…...
106.(cesium篇)cesium椎体旋转
听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <html lang="en"> <...
springboot+vue漫画之家系统(源码+文档)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的漫画之家系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风歌&a…...
什么是中国版软件能力成熟度之CSMM
当前,中国软件产业蓬勃发展,产业增速迅猛,发展韧性和潜力进一步凸显。由于我国长期缺乏相关的自主标准,20多年来国外标准在我国软件评估领域占据主导地位,不仅阻碍了我国自主产业发展,甚至通过评估等手段可…...
Jupyter Notebook环境如何搭建以及应用呢?
Jupyter Notebook 是一个开源的 Web 应用程序,可以创建和共享文学化程序文档,支持多种编程语言,如 Python、R、Julia等。下面是搭建 Jupyter Notebook 环境及应用的步骤: 安装 Python 首先需要在本地安装 Python。可以从 Python…...
vmware15+ubuntu+AS
一、VMware Workstation 与 Device/Credential Guard 不兼容 安装VMware15后,在运行启动ubuntu时一直提示与Device/Credential Guard不兼容 1、WINR打开运行,输入services.msc; 2、服务中找 HV主机服务,双击打开设置改为禁用&am…...
【软考备战·希赛网每日一练】2023年5月10日
文章目录 一、今日成绩二、错题总结第一题第二题第三题 三、知识查缺 题目及解析来源:2023年05月10日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析: proceed v.开始行动,开展;继续做(或从事、进行&…...
涉及红外的数据集
来源 红外和可见光的联合任务相关数据集 - 知乎 LLVIP Dataset(RGB-T Pedestrian Detection) Jia X, Zhu C, Li M, et al. LLVIP: A visible-infrared paired dataset for low-light vision[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2…...
网络编程(TCP与UDP协议)
文章目录 1. 网络编程1.1 软件架构1.2 网络基础 2. 网络通信要素2.1 如何实现网络中的主机互相通信2.2 通信要素一:IP地址和域名2.2.1 IP地址2.2.2 域名 2.3 通信要素二:端口号2.4 通信要素三:网络通信协议 3. 传输层协议:TCP与UD…...
专业恢复电脑数据软件Easyrecovery16
Easyrecovery是一款强大的数据恢复软件,它专门解决磁盘数据恢复问题。在计算机世界里,数据丢失经常是一件令人头疼的事情,但是有了Easyrecovery,您可以放心大胆地享受数据备份和恢复的乐趣。 Easyrecovery具有快速和有效的数据恢复…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...
