C++的union类型转化
#include <iostream>using namespace std;
//unsigned char a = 0x23;
union fd
{
float d;
//int a;
unsigned char data;
}speed;
int main()
{
speed.d = 16;
for(int i=0;i<4;i++)
{
cout << i<<":" <<int(speed.data)<<endl;
}
return 0;
}
为什么上述代码执行结果是这样的呢?
0:0
1:0
2:128
3:65
本帖最后由 jackz007 于 2019-11-12 16:39 编辑
这没什么啊,这说明 浮点数 16 的二进制编码是 4 个字节: 00,00,128,65
这个说法可以在下面的代码中得到验证:
#include <iostream>
using namespace std ;
union fd {
float d ;
unsigned char data ;
} speed ;
int main()
{
speed . data = 0 ;
speed . data = 0 ;
speed . data = 128 ;
speed . data = 65 ;
cout << speed . d << endl ;
return 0 ;
}
楼主应该深刻理解 C / C++ 语言的数据类型 union,就是不同类型的数据共享一块内存的意思,比如,本例中的 speed,总共占用 4 个字节,通过 speed . d 访问,它就是 4 个 unsigned char,通过 speed . d 访问,它就是 1 个 float,其实,访问的那 4 个字节都是同一个。 本帖最后由 闪亮的马路 于 2019-11-12 16:37 编辑
jackz007 发表于 2019-11-12 16:30
这没什么啊,这说明 浮点数 16 的二进制编码是 4 个字节: 00,00,128,65
这个说法 ...
关键是怎么与float d赋值的16相对应?我想知道它们的换算关系 闪亮的马路 发表于 2019-11-12 16:36
关键是怎么与float d赋值的16相对应?我想知道它们的换算关系
要了解 0,0,128,65 和浮点数 16 的换算关系,那就只能找 IEEE32 浮点数编码规范了,这是一个国际标准,你自己问一下度娘吧。 联合的作用是两个变量公用一块内存空间,所以同时只能使用其中一个成员,告诉我你想让它们怎么对应
页:
[1]