#include
//使用联合体来实现
union valReg
{
unsigned char data[4];
float fval;
};
int main()
{
union valReg val;
//将 16 进制值分别放进去 ,如果得出的值不对就交换位置
val.data[3]=0x41;
val.data[2]=0xf7;
val.data[1]=0xae;
val.data[0]=0x14;
printf("fval 十进制的值为=%f\n",val.fval);
return 0;
}
基于Monster 组和GPT的调写:
最后,我们使用 printf 函数将 val.fval 的值以十进制的形式输出到屏幕上。注意,因为 val.data 和 val.fval 使用了同一块内存空间,因此这里的 val.fval 表示的是将 val.data 解释为一个浮点数后的值。
简单一点就是把一个32位的16进制数转化为十进制数输出,,因为可能涉及到大端字节或小端字节问题,所以程序中注释有说明。
明白了么?
union 类似struct,不同的是里面所有的成员共享同一块内存
那么你给float 赋值的时候对应的char 也就有值了,反过来也一样
剩下的无非是int的4个字节是怎么转换成2进制的,float的4个字节又是如何转换成2进制的
都是书本上最基础的,简单了解即可,知道原理更便于理解,会笔算真心没必要
union 共用体,所有的成员共用同一块内存,里面存放的数据都是同一份,只不过按照不同类型处理的时候,转换出来的结果不一样罢了。