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一樣的假別名真指標 不但省了記憶體空間 而且不用& 抽象更好理解 以上都是我唬爛的 不要當真(逃)