【嵌入式面试题】union在单片机设计的妙用

本文探讨了C语言中union在单片机设计中的应用,包括大小端模式对union类型数据的影响,如何确定系统存储模式,以及union如何帮助节省内存。通过实例展示了如何利用union对变量进行位操作,特别是在内存有限的单片机环境下。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文首发地址:C语言关键字union在单片机设计的妙用 - 知乎

union与struct用法非常类似,不过其适用于不同时被用到的数据

1. 大小端模式对 union 类型数据的影响(51是大端,一般处理器都是小端)

union
{
int i;
char a[2];
}*p, u;
p = &u;
p->a[0] = 0x39;
p->a[1] = 0x38;
p.i 的值应该为多少呢?
这里需要考虑存储模式:大端模式和小端模式。

大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。
小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中

union 型数据所占的空间等于其最大的成员所占的空间。
对 union 型的成员的存取都是 相对于该联合体基地址的偏移量为 0 处开始,
也就是联合体的访问不论对哪个变量的存取都是从 union 的首地址位置开始。

/*
所以要是
小端输出:
大端输出:
*/

2. 如何用程序确认当前系统的存储模式?

Union check
{
       int i;
       char ch;
} c;
    c.i = 1;
    printf("%d",c.ch)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeAllen嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值