爲什麼通過使用聯合對象和定義有相同的內存作爲INT32和FLOAT32我得到不同的解決方案?
的唯一原因float/int union
甚至有意義憑藉的事實,即float
和int
份額32-bits
的storage size
。你所缺少的是floats
(其實所有的浮點數)存儲在IEEE-754 Floating Point Format
的理解(花車單精度,雙打雙精度,等..)
當您使用float/int union
詭計,您看到integer value
即integer equivalent
到IEEE-754 Single-Precision Floating Point Format
爲float
。這兩個值有什麼也沒有與代表相同的數字值。你可以看看它們佔用的內存,作爲float
或作爲integer
,因爲它們都佔用內存的32-bits
。如果您通過float
窗口查看,您會看到那些32-bits
表示爲float
。另一方面,如果您看到32-bits
與integer
相同,則只會看到32-bits
與integer
相同的情況。查看二進制表示的示例通常會有所幫助。
取例如,float
的值爲123.456
。如果您在內存看32-bits
看到:
The float value entered : 123.456001
binary value in memory : 01000010-11110110-11101001-01111001
As unsigned integer : 1123477881
的IEEE-754單精度浮點表示是內存中的特定浮點格式由以下三部分組成:
0 1 0 0 0 0 1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 0 0 1 0 1 1 1 1 0 0 1
|- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -|
|s| exp | mantissa |
其中s
是sign-bit
,exp
是biased exponent
而其餘的23-bits
被稱爲mantissa
。您無法預計投下float 123.456
並獲得任何接近integer 123
的東西,您off by 7 orders of magnitude
它不會將浮點數轉換爲int32嗎?
答:沒有
什麼是「我沒有以下壓縮的浮點數」是什麼意思? – 2014-11-22 11:01:48