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

image
也可应用:

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 中国大陆许可协议进行许可。

posted @   seekwhale13  阅读(59)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起