在使用联合的使用,我们通常用来判断大小端,但是其实不仅仅有这个用处。

我在网上看到还有其他的用途:

1、分离高低字节

这个需要结合cpu大小端来判断,原文如下:

这样的操作,而一个除法消耗四个机器周期,取余也需要进行一系列复杂的运算,如果在短时间内需要进行很多次这样的运算无疑会给程序带来巨大的负担。

其实进行这些操作的时候我们需要的仅仅是高低字节的数据分离而已,这样利用联合体我们很容易降低这部分开销。

联合体内数据是按地址对齐的。具体是高位数据还是低位数据要看平台的大小端模式,51是大端,stm32默认是小端,如果其他编译器还请自测。

仅仅用了一条减法指令就达到了除法、取余的操作,在进行高频率定时时尤为有用。

2、寄存器封装

看看TI固件库中寄存器是怎么封装的:

所有的寄存器被封装成联合体类型的变量,联合体里边的成员是一个32bit的整数及一个结构体,该结构体以位域的形式体现。这样就可以达到直接操控寄存器的某些位了。

比如,我们要设置PA0引脚的GPAQSEL1寄存器的[1:0]两位都为1,则我们只操控两个bit就可以很方便的这么设置:

GpioCtrlRegs.GPAQSEL1.bit.GPIO0 = 3

或者直接操控整个寄存器:

GpioCtrlRegs.GPAQSEL1.all |=0x03

以上就是关于联合体的一点总结笔记

C 语言 联合union初见

1.什么是联合? “联合”是一种构造类型的数据结构.在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,已 ...

结构体struct 与 联合union

1.C语言中的结构体 1.1 定义 结构体是由一系列相同或不同类型的变量组成的集合. struct 结构体名{               //struct为关键字,“结构体名”为用户定义的类型标识. ...

c++ 变量共享内存-联合(union)

共享内存极少使用,所以这里我们仅作了解. .将几个变量放在相同的内存区,但其中只有一个变量在给定时刻有有效值. .程序处理许多不同类型的数据,但是一次只处理一种.要处理的类型在执行期间才能确定. .在 ...

C#联合Union的实现方式

一.基础篇 C#不像C++,他本身是没有联合Union的,但是可以通过手动控制结构体每个元素的位置来实现,这需要结合使用StructLayoutAttribute.LayoutKind以及FieldO ...

【转】结构struct 联合Union和枚举Enum的细节讨论

结构struct 联合Union和枚举Enum的细节讨论 联合(Union)是一种构造数据类型,它提供了一种使不同类型数据类型成员之间共享存储空间的方法,同时可以实现不同类型数据成员之间的自动类型转换 ...

SQL SERVER 2012 第四章 连接 JOIN语句的早期语法结构 & 联合UNION

1/内部连接的早期语法结构 INNER JOIN SELECT * FROM Person.Person JOIN HumanResources.Employee ON Person.Person.I ...

C语言学习015:联合(union)与枚举(enum)

联合 联合和结构的区别是,结构会为每个字段申请一片内存空间,而联合只是申请了一片内存空间然后所有字段都会保存到这片空间中,这片空间的大小由字段中最长的决定,下面我们就开始定义一个联合 //联合的定义 ...

[C语言 - 12] Union联合

union Student {   int age;   char *name; } stu;   union只按照最长的数据成员分配控件,适用于有N个数据不会同时出现的情况,用以压缩空间.

c语言:union,大小端

union: 不允许只用联合变量名作赋值或其它操作. 也不允许对联合变量作初始化赋值,赋值只能在程序中进行. 小端存储: 以字节为单位,低存低,高存高. 任何数据在内存中都是以二进制(1或着0)顺序存 ...

随机推荐

Unity Container 应用示例

一 项目引用Unity 右键项目引用-> 管理Nuget包->搜索unity->安装Unity 和 Unity Interception Extension,如下图所示. 二 创建基 ...

java持久层框架mybatis如何防止sql注入

看到一篇很好的文章:http://www.jfox.info/ava-persistence-framework-mybatis-how-to-prevent-sql-injection sql注入大 ...

MySQL sharding的几个参考地址

http://stackoverflow.com/questions/5541421/mysql-sharding-approaches http://www.oschina.net/search?s ...

exit和_exit的区别

参考 http://www.cnblogs.com/hnrainll/archive/2011/08/17/2142001.html p.p1 { margin: 0.0px 0.0px 0.0px ...

CBO学习笔记(转)

Query Transformation 在继续研究SQL的其他操作(比如Join)对CBO的影响之前,我们来讨论一下Oracle优化器的Query Transformation特性.我们都习惯于根据 ...

查找 GPU 计算能力

你能在这里找到你的 GPU 的计算能力: https://en.wikipedia.org/wiki/CUDA#Supported_GPUs

产品大神1--工具axure

一,axure安装 链接:https://pan.baidu.com/s/1rb3SH5HSogP1k_ARTZTflA 提取码:084p 二,axure8.0的使用 因为下面的文章都已经写的非常详细 ...

C#异常处理。

一.什么是异常? 程序运行时发生的错误. 二.异常处理的一般代码模式. try{..可能发生异常的代码} catch{..对异常的处理} finally{...无论是否发生异常.是否捕获异常都会执行的 ...

RabbitMQ&RocketMQ动态添加Queue参考

Kafka重复消费与消息丢失参考: https://www.cnblogs.com/kaleidoscope/p/9763053.html https://blog.csdn.net/qingqing ...

union在c语言中的作用,c语言联合union的使用用途相关推荐

  1. struck在c语言中的作用,C语言-选择题及答案.doc

    C语言-选择题及答案.doc 计算机程序设计基础(C语言) 单项选择练习题 说明:带*号的对非信息学院的同学不作要求. 一.基本概念 1. C语言程序是由 C 构成的. A)一些可执行语言 B)mai ...

  2. 二维数组在c语言中的作用,C语言中的二维数组

    1.二维数组的定义和引用 一. 数据类型 数组名[常量表达式1][常量表达式2]; (1)假如有个二维数组array[n][m],则行下标的取值范围0~n-1 (2)列下标的取值范围0~m-1 (3) ...

  3. %2d在c语言中什么作用,C语言中的 %2d是什么意思

    修饰符格式说明.意义M%md以宽度m输出整型数,不足m时,左补空格0m%0md以宽度m输出整型数,不足m时,左补零m,n%m.nf以宽度m输出实型小数,小数位为n位例如:设i=123,a=12.345 ...

  4. step在c语言中什么作用,C语言step-by-step(二)(数据类型)

    第2章:数据类型 先介绍一些计算机指令简单的知识: 大家都知道我们的计算机有硬盘.有内存这两样东西,都属于存储器,但是硬盘属于在掉电后不丢失信息,一般我们把资料存放在硬盘:然而内存掉电会丢掉所有信息, ...

  5. -%3e运算符在c语言中的作用,C语言逻辑运算符知识整理

    在高中数学中,我们学过逻辑运算,例如p为真命题,q就假命题,那么"p且q"为假,"p或q"为真,"非q"为真. 在C语言中,也有类似的逻辑运 ...

  6. 进制在c语言中的作用,C语言中的进制关系

    引言 在做数据读写传输时最常用也最直观的莫过于十进制数,但是在不同应用场合.存储的方便在C语言开发时候也常采用二进制.八进制和十六进制存储数据.这边博文将对这3种进制转十进制及十进制转这3种进制做一解 ...

  7. sbit在c语言中的作用,C语言中对引的读写操作 sbit的三种用法

    描述 在C语言里.如果直接写P1.O,C编译器并不能识别,而且P1.O也不是一个合法的C语言变量名,所以得给它另起一个名字,比如起名为P1-0,可是P1-0是不是就是P10呢? 可以这么认为,C编译器 ...

  8. c语言中置位作用,C语言中常见的置位操作(置0或置1)

    写成宏,方便移植 #define setbit(x,y) x|=(1< #define clrbit(x,y) x&=~(1< //将X的第Y位清0 方法二: C语言位运算除了可以 ...

  9. static在c语言中的作用_C语言关键字 static 的用法

    接上文:C语言的32个关键字 C语言 static 关键字的常见用法有三种: 用于局部变量的修饰符: 用于全局变量的修饰符: 用于函数的修饰符. 1.用于局部变量的修饰符 当 static 用于修饰局 ...

最新文章

  1. 如果机器能帮我们学习,那么有多少东西能够被遗忘?
  2. 解放程序员双手之Supervisor
  3. 关于外部存储器件对存储数据的管理。
  4. [持续交付实践] 最后一公里,你需要一套具备质量思维的发布平台!
  5. 【PC工具】离线地图图片地图瓦片下载神器map-download地图下载器
  6. Python 3基础教程32-正则
  7. 如何修改Series和DataFrame类型中的元素值_Redis的HSCAN命令中COUNT参数的失效场景
  8. django请求与响应(HttpRequest对象和HttpResponse对象)
  9. 【分布式】Zookeeper在大型分布式系统中的应用
  10. 移位运算符 实现 二进制数的 高低位翻转(完整逻辑代码)
  11. python进程与线程_Python进程与线程知识
  12. Fragment懒加载预加载
  13. F#基础教程 ref类型
  14. Java实验9 T6.将对象和数组存储在dat文件中
  15. Java读写二进制文件示例
  16. hive explain 源码分析
  17. IE 浏览器重置方法
  18. python基于django的校园公寓宿舍报修管理系统设计与实现
  19. 【上电即上华为云】华为云openCPU智联模组_wifi_HF-LPX70_RISC-V_CoAP
  20. IT运维工程师要会什么?

热门文章

  1. 水之城 Aquatico V1.009.0 官方中文 免安装【4.04G】
  2. 分享个WIFI 一键配置原理-以ESP8266为例
  3. GPT-4比人类更懂融资!AI企划书让VC疯狂打call
  4. 1292 - Incorrect date value: ‘1985‘ for column ‘date‘ at row 1
  5. layui+腾讯地图坐标点选取插件,支持地址关键字模糊/联想搜索、当前城市定位、地址地图标点联动
  6. 修复miniblink一处内存泄漏的bug
  7. 二十五、扇子啊!扇子!
  8. 【Java项目】——基于SpringBoot的用户信息管理系统
  9. JAVA 比较两张图片的相似度
  10. 13.网络爬虫—多进程详讲(实战演示)