??小數(shù)在內(nèi)存中是以浮點數(shù)的形式存儲的,。浮點數(shù)并不是一種數(shù)值分類,,它和整數(shù)、小數(shù),、實數(shù)等不是一個層面的概念,。浮點數(shù)是數(shù)字(或者說數(shù)值)在內(nèi)存中的一種存儲格式,它和定點數(shù)是相對的,。 C語言使用定點數(shù)格式來存儲 short,、int、long 類型的整數(shù),,使用浮點數(shù)格式來存儲 float,、double 類型的小數(shù)。整數(shù)和小數(shù)在內(nèi)存中的存儲格式不一樣,。 我們在學(xué)習(xí)C語言時,,通常認(rèn)為浮點數(shù)和小數(shù)是等價的,并沒有嚴(yán)格區(qū)分它們的概念,,這也并沒有影響到我們的學(xué)習(xí),,原因就是浮點數(shù)和小數(shù)是綁定在一起的,只有小數(shù)才使用浮點格式來存儲,。 其實,,整數(shù)和小數(shù)可以都使用定點格式來存儲,也可以都使用浮點格式來存儲,,但實際情況卻是,,C語言使用定點格式存儲整數(shù),使用浮點格式存儲小數(shù),,這是在“數(shù)值范圍”和“數(shù)值精度”兩項重要指標(biāo)之間追求平衡的結(jié)果,稍后我會給大家?guī)砩钊氲钠饰觥?/p> 計算機的設(shè)計是一門藝術(shù),,很多實用技術(shù)都是權(quán)衡和妥協(xié)的結(jié)果,。 ??浮點數(shù)和定點數(shù)中的“點”指的就是小數(shù)點! 對于整數(shù),,可以認(rèn)為小數(shù)點后面都是零,,小數(shù)部分是否存在并不影響整個數(shù)字的值,所以干脆將小數(shù)部分省略,,只保留整數(shù)部分,。 定點數(shù)??所謂定點數(shù),就是指小數(shù)點的位置是固定的,,不會向前或者向后移動,。 ??假設(shè)我們用4個字節(jié)(32位)來存儲無符號的定點數(shù),并且約定,前16位表示整數(shù)部分,,后16位表示小數(shù)部分,,如下圖所示: 精度 例如,,電子的質(zhì)量為:
太陽的質(zhì)量為:
如果使用定點數(shù),,那么只能按照=前面的格式來存儲,這將需要很大的一塊內(nèi)存,,大到需要幾十個字節(jié),。 更加科學(xué)的方案是按照=后面的指數(shù)形式來存儲,這樣不但節(jié)省內(nèi)存,也非常直觀 這種以指數(shù)的形式來存儲小數(shù)的解決方案就叫做浮點數(shù),。 浮點數(shù)是對定點數(shù)的升級和優(yōu)化,,克服了定點數(shù)取值范圍太小的缺點。 浮點數(shù)??C語言標(biāo)準(zhǔn)規(guī)定,,小數(shù)在內(nèi)存中以科學(xué)計數(shù)法的形式來存儲,,具體形式為:
對各個部分的說明:
下面我們以 19.625 為例來演示如何將小數(shù)轉(zhuǎn)換為浮點格式,。 當(dāng) base 取值為 10 時,,19.625 的浮點形式為:
當(dāng) base 取值為 2 時,,將 19.625 轉(zhuǎn)換成二進(jìn)制為 10011.101,,用浮點形式來表示為:
可以看出,當(dāng)基數(shù)(進(jìn)制)base 確定以后,,指數(shù)
換句話說,,將小數(shù)轉(zhuǎn)換成浮點格式后,小數(shù)點的位置發(fā)生了浮動(移動),,并且浮動的位數(shù)和方向由 exponent 決定,,所以我們將這種表示小數(shù)的方式稱為浮點數(shù)。 |
|