当用double读取时,如果是int型会读取int后32位值,而当用int读取时,如果是double型会只读取前32位,出来的都是垃圾值。 如果在内存中float型自动会优化成double存储。
int a=1;
printf("%e",*(float*)&a); //要以%e格式输出,%f的话只会输出0
根据IEEE754规范,这个值应该是2^(1-127-23)==2^(-149)==1.4012984643248170709237295832899e-45
详细规则你可以网上搜索IEEE754规范(浮点数存储格式)
int是32位, double是64位, 读取会有内存溢出.
自己算难度太大,你们老师也不会。需要查阅浮点数格式
可以通过程序输出出来
#include
int main()
{
int n = 1;
printf("%f\n", *(float *)&n);
n = 2;
printf("%f\n", *(float *)&n);
getchar();
}