C语言联合体
参考https://bbs.huaweicloud.com/blogs/391571
联合体,又叫共用体,是由程序员自己设定的一种自定义数据类型。和结构体一样,联合体也拥有许多成员变量,不过其所有的成员变量占用空间的地址都相同,即所有成员使用同一份空间。
联合体(union)与结构体(struct)的区别:
结构体中每个成员都有自己独立的存储空间,互不干扰;联合体恰恰相反,所有成员共用一段存储空间,大小以其中占据最大空间成员为准,在单片机的使用中可用来查询一组IO中某个IO口的电平或者用来访问一组数据中某一个位或几个位的具体数值。
#include <stdio.h> typedef unsigned char uchar; typedef union { uchar BYTE; struct { uchar bit0 : 1; uchar bit1 : 1; uchar bit2 : 1; uchar bit3 : 1; uchar bit4 : 1; uchar bit5 : 1; uchar bit6 : 1; uchar bit7 : 1; }BITTYPE; }unType; void main() { unType Key_flag; Key_flag.BYTE = 0x0F; printf("first num is %d\n", Key_flag.BYTE); printf("first num is %d", Key_flag.BITTYPE.bit0); }
运行结果:由于PC机上使用的是X86结构的 CPU,它是小端模式51单片机是大端模式很多ARM、DSP 也是小端模式(部分 ARM 处理器还可以由硬件来选择是大端模式还是小端模式),我们使用的stm32是小端模式,即低位地址存储低位数据。
first num is 15 first num is 1
也可应用:
typedef union { uchar BYTE; struct { uchar bit0:1; uchar bit1:1; uchar bit2:1; uchar bit3:1; uchar bit4:1; uchar bit5:1; uchar bit6:1; uchar bit7:1; }BITTYPE; }unType;
本文作者:seekwhale13
本文链接:https://www.cnblogs.com/seekwhale13/p/17169220.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步