因爲float和double類型的數據在內存中的保存形式是同樣的,只是double表示的範圍更大而已。所以,這裏只介紹float的表示方法。double同理。
假設,我如今有一個數據-12.25。那麼這個數據在計算機內部是如何存儲的呢?
首先,將這個浮點數轉換成二進制數。通過轉換,獲得的二進制數爲:1100.01。
接着,將這個二進制數用科學計數法來表示,1.10001 * 2 ^ 3。
因爲這個數是負數。因此,符號位爲1;指數位爲127 + 3 = 130;尾數(小數)爲10001。
而後,將指數130轉換爲二進制數10000010。
最後,因爲float佔4個字節,也就是32位,因此,-12.25在內存中表示爲:
11000001010001000000000000000000,將這個數用十六進制表示爲0xC1440000。
那麼,咱們的計算結果對不對呢?咱們能夠用程序來驗證一下。ide
float a = -12.25; unsigned int* p = ( unsigned int* )&a; printf ( "0x%08X\n", *p ); system ( "pause" ); return 0;
運行結果爲:
運行結果和咱們計算的徹底同樣。code