共用体union

一、共用体的特性

共用体又叫做联合体,共用体的特性如下:
1.共用体的所有成员共用一段内存空间,且所有成员的起始位置是一致的
2.共用体的值由最后赋值的成员决定
3.共用体的内存大小

  • 共用体的内存必须大于或等于其他成员变量中最大数据类型(含数组)的大小。
  • 共用体的内存必须是最宽基本数据类型整数倍,如果不是,则填充字节。

二、共用体的用途1(判断大小端)

#include <stdio.h>
union myunion {
    int a;
    char b;
};
int main()
{
    union myunion test;
    test.a = 0x12345678;        
    if (test.b == 0x78)
        printf("小端模式");
    else if (test.b == 0x12)
        printf("大端模式");    
     return 0;
}

 三、共用体的用途2(给GPIO赋值)

/* 用途2: 给成员集体赋值*/
#include <stdio.h>

struct GPIO{
	unsigned short Pin0 :1;
	unsigned short Pin1 :1;
	unsigned short Pin2 :1;
	unsigned short Pin3 :1;
	unsigned short Pin4 :1;
	unsigned short Pin5 :1;
	unsigned short Pin6 :1;
	unsigned short Pin7 :1;
	unsigned short Pin8 :1;
	unsigned short Pin9 :1;
	unsigned short Pin10 :1;
	unsigned short Pin11 :1;
	unsigned short Pin12 :1;
	unsigned short Pin13 :1;
	unsigned short Pin14 :1;
	unsigned short Pin15 :1;
};

union IODevice{
	unsigned short gpiovalue;
	struct GPIO gpiox;
};

int main()
{
	union IODevice IO;
	IO.gpiovalue=0xff;
	printf("%d\n",IO.gpiox.Pin0);
}

四、共用体的用途3

#include <stdio.h>
#include <stdlib.h>

#define TOTAL 4  //人员总数

struct{
    char name[20];
    int num;
    char sex;
    char profession;
    union{
        float score;
        char course[20];
    } sc;
} bodys[TOTAL];

int main(){
    int i;
    //输入人员信息
    for(i=0; i<TOTAL; i++){
        printf("Input info: ");
        scanf("%s %d %c %c", bodys[i].name, &(bodys[i].num), &(bodys[i].sex), &(bodys[i].profession));
        if(bodys[i].profession == 's'){  //如果是学生
            scanf("%f", &bodys[i].sc.score);
        }else{  //如果是老师
            scanf("%s", bodys[i].sc.course);
        }
        fflush(stdin);
    }

    //输出人员信息
    printf("\nName\t\tNum\tSex\tProfession\tScore / Course\n");
    for(i=0; i<TOTAL; i++){
        if(bodys[i].profession == 's'){  //如果是学生
            printf("%s\t%d\t%c\t%c\t\t%f\n", bodys[i].name, bodys[i].num, bodys[i].sex, bodys[i].profession, bodys[i].sc.score);
        }else{  //如果是老师
            printf("%s\t%d\t%c\t%c\t\t%s\n", bodys[i].name, bodys[i].num, bodys[i].sex, bodys[i].profession, bodys[i].sc.course);
        }
    }
    return 0;
}

五、共用体的用途4(类型转换)

union Converter {
    int i;
    float f;
};

// 使用共用体进行类型转换
union Converter conv;
conv.f = 3.14;
int intValue = conv.i;

 

六、共用体的用途5(处理特定硬件寄存器)

union Register {
    unsigned int reg;
    struct {
        unsigned int bit0: 1;
        unsigned int bit1: 1;
        unsigned int bit2: 1;
        unsigned int bit3: 1;
        unsigned int reserved: 28;
    } bits;
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NineData与OceanBase完成产品兼容认证,共筑企业级数据库新生态

近日&#xff0c;云原生智能数据管理平台 NineData 和北京奥星贝斯科技有限公司的 OceanBase 数据库完成产品兼容互认证。经过严格的联合测试&#xff0c;双方软件完全相互兼容、功能完善、整体运行稳定且性能表现优异。 此次 NineData 与 OceanBase 完成产品兼容认证&#xf…

泰迪·上海杉达学院大数据与智能技术工作室挂牌签约仪式圆满结束

2024年3月5日&#xff0c;上海杉达学院邀请广东泰迪智能科技股份有限公司上海分公司总经理彭艳昆一行出席“泰迪上海杉达学院大数据与智能技术工作室”签约挂牌仪式。上海杉达学院副校长兼信息科学与技术学院院长陈瑛、信息科学与技术学院副院长于晓东、信息科学与技术学院党总…

Diffusion Models for Implicit Image Segmentation Ensembles

隐式图像分割集成的扩散模型 摘要 扩散模型在图像生成建模方面表现出令人印象深刻的性能。本文提出了一种新的基于扩散模型的语义分割方法。通过改进训练和采样方案&#xff0c;我们证明了扩散模型可以对医学图像进行病灶分割。为了生成特定于图像的分割&#xff0c;我们在地…

SpringCloud(20)之Skywalking Agent原理剖析

一、Agent原理剖析 使用Skywalking的时候&#xff0c;并没有修改程序中任何一行 Java 代码&#xff0c;这里便使用到了 Java Agent 技术&#xff0c;我 们接下来展开对Java Agent 技术的学习。 1.1 Java Agent Java Agent 是从 JDK1.5 开始引入的&#xff0c;算是一个比较老的…

直播预告|小白开箱: 云数据库在五朵云上的评测

3 月 7 日&#xff0c;周四晚上 19:00-20:30 由明说三人行组织&#xff0c;邀请了 NineData 国际总经理(GM) Ni Demai、云猿生数据 CTO &#xff06; 联合创始人子嘉&#xff0c;和《明说三人行》创始人 &主持人明叔&#xff0c;共同围绕《小白开箱: 云数据库在五朵云上的评…

红帆ioffice-udfGetDocStep.asmx存在SQL注入漏洞

产品简介 红帆iOffice.net从最早满足医院行政办公需求&#xff08;传统OA&#xff09;&#xff0c;到目前融合了卫生主管部门的管理规范和众多行业特色应用&#xff0c;是目前唯一定位于解决医院综合业务管理的软件&#xff0c;是最符合医院行业特点的医院综合业务管理平台&am…

Qt插件之输入法插件的构建和使用(一)

文章目录 输入法概述输入法插件实现及调用输入键盘搭建定义样式自定义按钮实现自定义可拖动标签数字符号键盘候选显示控件滑动控件手绘输入控件输入法概述 常见的输入法有三种形式: 1.系统级输入法 2.普通程序输入法 3.程序自带的输入法 系统级输入法就是咱们通常意义上的输入…

SpringBoot3整合Mybatis-plus报错IllegalArgumentException

错误信息 使用的SpringBoot3版本&#xff1a;3.2.3 java.lang.IllegalArgumentException: Invalid value type for attribute factoryBeanObjectType: java.lang.String 第一想法就是感觉是版本太低导致和SpringBoot3不兼容。 查询mybatis-plus最高的版本 <!-- https://m…

“安康杯”安全知识竞赛活动方案

“安康杯”知识竞赛&#xff0c;顾名思义也就是把竞争机制、奖励机制、激励机制应用于安全生产活动中的群众性“安全”与“健康”竞赛。本次竞赛包括 4 个竞赛环节&#xff0c;分别是胜券在握&#xff08;必答题&#xff09;、 刻不容缓&#xff08;抢答题&#xff09;、披荆斩…

volatile关键字的作用 以及 单例模式(饿汉模式与懒汉模式的区别及改进)

文章目录 &#x1f4a1;volatile保证内存可见性&#x1f4a1;单例模式&#x1f4a1;饿汉模式&#x1f4a1;懒汉模式&#x1f4a1;懒汉模式多线程版&#x1f4a1;volatile防止指令重排序 &#x1f4a1;volatile保证内存可见性 Volatile 修饰的变量能够保证“内存可见性”以及防…

数据库(mysql)-新手笔记(主外键,视图)

主外键 主键(唯一性,非空性) 主键是数据库表中的一个或多个字段&#xff0c;其值唯一标识表中的每一行/记录。 唯一性: 主键字段中的每个值都必须是唯一的&#xff0c;不能有两个或更多的记录具有相同的主键值 非空性&#xff1a;主键字段不能包含NULL值。 外键(引用完整 …

AXI4总线解析

一、读地址 AWVALID和AWREADY同时为高时&#xff0c;在这个上升沿&#xff0c;图中黄线&#xff0c;将接下来的数据写入地址40000000中。 在

递增三元组(第九届蓝桥杯)

文章目录 题目原题链接思路分析二分做法1二分做法2双指针做法前缀和解法 题目 原题链接 递增三元组 思路分析 由时间复杂度可知需要至少优化到 O ( n l o g n ) O(nlogn) O(nlogn)才行 而纯暴力枚举三个数组的话&#xff1a; O ( n 3 ) O(n^3) O(n3) 可以考虑将b[]作为标志&…

28000MB 是多少GB 内存?怎么清理内存空间?

在计算机领域&#xff0c;我们经常会听到关于存储容量的单位&#xff0c;如 MB&#xff08;兆字节&#xff09;和 GB&#xff08;千兆字节&#xff09;。如果您在处理计算机内存或存储空间时遇到了 28000MB 这样的容量&#xff0c;您可能会想知道它相当于多少GB。本文将为您解答…

在win10中下载桌面版的docker并在docker中搭建运行基于linux的容器

在win10中下载桌面版的docker 1.背景 在很多时候需要linux系统部署项目&#xff0c;在win10中安装虚拟机并在虚拟机中安装linux系统比较繁琐&#xff0c;可以利用win10自带的hyper-v的虚拟机管理工具&#xff0c;打开该虚拟机管理工具&#xff0c;安装docker&#xff0c;并在…

压测工具jmeter使用

目录 下载 解压 修改配置 启动模拟发送请求 下载 解压 修改配置 启动 下载地址&#xff1a;https://archive.apache.org/dist/jmeter/binaries/ 参考文章&#xff1a;https://www.cnblogs.com/Uni-Hoang/p/15573606.html 一般下zip版本&#xff0c;如apache-jmeter-5.2.1.zip …

ALLegro之单独设置PIN脚与覆铜连接方式

​ 设计PCB时,有很多时候在总电源输入处需要将一部分pin脚设置为全连接,给大电流拓宽通道。然而如果往常针对同一覆铜下的同属性pin脚只能全部设置为全连接或者其他。所以,在初学者手上也出现了“投机份子”,先给全部覆铜改成统一的常规模式,比如十字连接,然后转换成静态…

八、西瓜书——特征选择与稀疏学习

1.子集搜索与评价 对于1个学习任务来说,给定属性集,其中有些属性可能很关键、很有用&#xff0c;另一些属性则可能没什么用&#xff0c;我们将属性称为“特征”(feature),对当前学习任务有用的属性称为“相关特征”(relevant feature)、没什么用的属性称为“无关特征”(irrelev…

基于springboot的车辆充电桩管理系统(系统+数据库+文档)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

航天民芯一级代理 MT3608 MT3608L 升压转换器 1.2MHZ

MT3608/MT3608L是恒定频率的6引脚SOT23电流模式升压转换器&#xff0c;适用于小型、低功耗应用。MT3608在1.2MHz&#xff0c;允许使用微小、低成本的频率高度不超过2mm的电容器和电感器。内部软启动可实现较小的浪涌电流和延长电池寿命。MT3608具有自动切换到脉冲的功能轻负载下…