uint32_t i = 11;
cout << *(float*)&i << endl;
cout << (float)i << endl;
結果為:
*(float *)&val: 1.54143e-44
(float )val: 11
不是很懂為什么兩個值不一樣,第一個*(float*)&i,將i的地址轉化為float*,再把值取出來;也就是將uint32_t的資料轉化為float型別,那么為什么不能直接(float)val直接轉化呢?
uj5u.com熱心網友回復:
(float*)&i ,是把i存放在記憶體中的內容直接解釋為float,因為float的格式和int完全不一致,所以錯誤(float)i ,是把整形轉為float,編譯器會自動幫你轉換。
uj5u.com熱心網友回復:
有一個特例:float的0.0f
和
int的0
完全一致。
uj5u.com熱心網友回復:
1樓說的很對,整形和float的記憶體分配規則不一樣,你這樣強擼肯定灰飛煙滅轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/279389.html
標籤:C++ 語言
下一篇:救救我吧
