union Data {
int b;
double c;
};
union Data data;
data.b = 10;
printf("%f\n",data.c);
看完了别人的部落格,觉得自信满满懂了 union
自己测试后,跟预期的答案不一样...自己还是完全不懂
我预期是 10.000000
b c共用内存,操作 data.b = 10 后,data.c 完全可以存下10,显示出来应该是
10.000000阿...
谢谢
作者: jerryh001 2018-08-03 11:44:00
浮点数和整数储存格式不一样
那假设 union 内是个 char 和 int呢?data.a = 'x'; printf("%d\n",data.b); 也是完全不如预期
我觉得每个写C/C++的应该要把IEEE754列为必修....IEEE754看一次可以搞懂很多问题
不是120可能是你的char只用到1byte,其他memory是非0,你可以把union Data data;换成global variable看看
boss ,你的建议非常有用。是不是他宣告为 global就是在 .bss 区块,系统会自动初始为0
同页23148那篇有你要的答案 建议看看还是不懂请google IEEE754跟little endian XD
谢了..我听了各位大大的建议去读了IEEE754都懂了回到原问题 b=0x0A,用double(8byte)去表示,IEEE转换后,用格式化输出 %f 为 0.000000
作者:
djshen (djshen)
2018-08-03 18:48:00你要不要自己算算看那个数有多小
作者:
cutekid (可爱小孩子)
2018-08-03 20:49:005e-323
作者:
remember (人老也有天使收)
2018-08-03 21:04:00读懂ieee745啊 厉害
那东西很难懂吗 = = 不就解释FLOAT怎么表示而已到是上面有人提到重点 他还有little endian的问题
那如果两个变量都是 int 呢刚刚试了一下,就没问题了呢
作者: jerryh001 2018-08-07 21:46:00
两个都int那union的意义在哪
你可以得到一个真正的别名 而不是像reference一样的假别名真指标 不但省了内存空间 而且不用& 抽象更好理解 以上都是我唬烂的 不要当真(逃)