C之浮點數(三)
下來我們就來講講關於浮點數的轉換:1、將浮點數轉換成二進制;2、用科學計數法表示二進制浮點數;3、計算指數偏移後的值。註意:計算指數時需要加上偏移量,而偏移量的值與類型有關。那麽實數 8.25 在內存中的 float 該怎麽表示呢?8.25 的二進制表示:1000.01 ==> 1.00001 * (2 ^ 3);符號位:0; 指數:127 + 3 ==> 130 ==> 1000 0010; 小數:00001 所以內存中8.25的 float
我們在 Linux 中做個 8.25 的轉換實驗,看看它是否在內存中表示為 0x4104 0000,代碼如下:
#include <stdio.h> int main() { float f = 8.25; unsigned int* p = (unsigned int*)&f; printf("0x%08X\n", *p); return 0; }
我們看到打印出的結果如下,確實是我們分析的那樣。
在 C 語言中,int 類型的範圍為:[ -2^31, 2^31 - 1]; float
下來我們做個實驗,以驗證 float 所表示的數是不精確的,代碼如下:
#include <stdio.h> int main() { float f = 3.1415f; float fl = 123456789; printf("%0.10f\n", f); printf("%0.10f\n", fl); return 0; }
我們看到打印結果如下,我們期望的 f 本應該是3.141500000,f1 本應該是 123456789.0000000000,可是結果是 f = 3.1414999962; f1 = 123456792.0000000000。這也從側面證實了我們說的是正確的,用浮點數表示的數字是不精確的。
那麽關於浮點數,我們可總結為:1、浮點類型與整數類型的內存表示法不同;2、內存表示更加復雜;3、可表示的範圍更大;4、是一種不精確的類型;5、它的運算速度比較慢。關於浮點數的相關知識我們就先學習到這了,後面我們繼續學習 C 語言的其他知識。
有興趣的可以加我一起學習 C 語言,QQ:243343083。
C之浮點數(三)