[英]C++ floating point representation
我試圖從我從這里得到的十六進制表示形式創建一個float
。 對於32.50002
的表示32.50002
,該站點將IEEE 754十六進制表示形式表示為0x42020005
。
在我的代碼中,我有: float f = 0x42020005;
。 但是,當我打印該值時,得到的是1.10E+9
而不是32.50002
。 為什么是這樣?
我正在使用Microsoft Visual C ++ 2010。
當通過=
為float
變量分配值時,不分配其內部表示,而是分配其值。 十進制的0x42020005是1107427333,這就是您要分配的值。
float
的基礎表示無法以獨立於平台的方式進行檢索。 但是,做一些假設(即, float
實際上是使用IEEE 754格式的),我們可以欺騙一下:
float f;
uint32_t rep = 0x42020005;
std::memcpy(&f, &rep, sizeof f);
將給出期望的結果。
0x42020005
是一個int
,其值是1107427333。
float f = 0x42020005;
等於float f = 1107427333;
0x42020005
實際上是0x42020005
的int
值。
您可以嘗試此代碼。 應該工作...使用聯合:
union IntFloat {
uint32_t i;
float f;
};
並在需要轉換值時調用它。
union IntFloat val;
val.i = 0x42020005;
printf("%f\n", val.f);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.