理解浮點數的構成

理解浮點數的構成我的以爲對於新手是一個比較困難的事,我就想了很久,看了好幾篇參考資料,才大概弄清。。。spa

下面就說一下本身的理解吧~code

關於單精度浮點型的構造:內存

通常6-8位有效數字(假設float佔4個字節,一個符號位,8個指數位,23個尾數。
ci

符號位[  ]+(只存放指數)指數位[  ] [  ] [  ] [  ] [  ] [  ] [  ] [  ]+尾數[  ]*23)


上面給出了浮點數的表示方法,6-8位有效數字大概就是10^6到10^8個數(通常超過7位就四捨五入了),這個與編譯器有關。其實,也就是說float裏面有2^23=83886087個數,對應大概能表示10^6—10^8個數。一個符號位就是正負的符號0或1,還有8個指數位因爲有正負也就是-127~128。編譯器

說道這裏,你們感受多是懂了,不過頗有可能仍是沒懂。編譯


我給出問題,float能表示的大概的範圍-3.4E38~3.4E38,這個數又是怎麼來的? table


咱們知道計算機是以二進制來存取數據的,二進制也有其對應的浮點數形式。好比,1001.101.轉換成10進制就是9.625.而對於IEEE標準要求浮點數必須是規範的,小數點左側必須爲1.這樣,就變爲1.001101*2^3(這裏要注意,沒錯,二進制的科學技術法就是2的n次冪)。因此,對應的32爲表示以下。擴展

符號位0|指數冪 10000010|尾數 00110100000000000000000數據類型

這裏咱們看到尾數第一個1省略了,由於IEEE規定了小數點第一位是1,因此能夠將這個符號位添加到後面來保存更多的數據。二進制

指數位是這樣理解的,由於浮點數2進制的指數範圍爲-127~128,而8位2進制數能表示的數的範圍0-255(無符號數,不要把這個指數冪當成有符號數),因此這裏要有一個誤差(須要多思考一下)好比,當實際的指數值爲0的時候,在2進制的指數位表示爲127(實際值=e—127).因此,當實際值爲3的時候,e=130(也就是指數位爲130,10000010)

最後再舉一個例子,

-6.5

符號位1|指數冪 10000001|尾數 10101000000000000000000


如今應該知道那個範圍是怎麼算出來的吧,


截圖就是2^128的結果(浮點數的大體範圍由指數位來決定)。

(說的可能仍是有點混亂,以後若是更好的解釋思路回來修改一下)

下面是一個C++中有關基本數據類型的表格:

類型

含義

最小尺寸

bool

布爾類型

未定義

char

字符

8位

wchar_t

寬字符

16位

char16_t

Unicode字符

16位

char32_t

Unicode字符

32位

short

短整型

16位

int

整型

16位

long

長整形

32位

long long(C++ 11)

長整形

64位

float

單精度浮點型

6-8位有效數字(假設float佔4個字節,一個符號位,8個指數位,23個尾數。2^23=83886087位,2^8<=>(-128~128)\

Float表示-2^128~2^128

內存中

符號位[]+(只存放指數)指數位[][][][][][][][]+尾數[]*23)

double

雙精度浮點型

10位有效數字

long double

擴展精度浮點型

10位有效數字

相關文章
相關標籤/搜索