教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Java培訓(xùn)實(shí)戰(zhàn)教程之浮點(diǎn)t類型數(shù)據(jù)在內(nèi)存中的存儲

更新時(shí)間:2015年12月29日13時(shí)35分 來源:傳智播客Java培訓(xùn)學(xué)院 瀏覽次數(shù):

float 4個(gè)字節(jié)(采用IEEE754標(biāo)準(zhǔn):標(biāo)準(zhǔn)規(guī)定了計(jì)算機(jī)程序設(shè)計(jì)環(huán)境中的二進(jìn)制和十進(jìn)制的浮點(diǎn)數(shù)自述的交換、算術(shù)格式以及方法)
         浮點(diǎn)數(shù)在內(nèi)存中是按科學(xué)計(jì)數(shù)法來存儲的,其整數(shù)部分始終是一個(gè)隱含著的"1"
         例如:123.45=1.2345*10^2;
         一個(gè)float類型的數(shù)據(jù)在內(nèi)存中的存儲格式為
                   符號位     指數(shù)位              底數(shù)位
                   0                00000000         0000000 00000000 00000000
                   S                 EEEEEEEE         MMMMMMM MMMMMMMM MMMMMMMM
                   1位     8位                    23位
                   S:      1位,表示負(fù)數(shù),0表示正數(shù)
                   E:  8位,表示指數(shù),可表示數(shù)據(jù)范圍(00000000-11111111,對應(yīng)的十進(jìn)制為0-255)
                                     因?yàn)橹笖?shù)可以是正數(shù)也可以是負(fù)數(shù),IEEE754標(biāo)準(zhǔn)規(guī)定:指數(shù)減去127才是實(shí)際的指數(shù)(這是規(guī)定)
                                    
                                     float的指數(shù)表示范圍是-127到128;
                   M:  24位(實(shí)際只存儲23位),表示底數(shù)
                   因?yàn)樗械男?shù)都可以表示為1.xx*10^n;小數(shù)點(diǎn)前面永遠(yuǎn)是1,所以小數(shù)點(diǎn)前面一位默認(rèn)不存儲,只存儲小數(shù)點(diǎn)后面的23位
                  
                   所以float的數(shù)據(jù)范圍
                            1*-2^128到1*2^128  也即 -3.04E38~3.04E38(E表示10的幾次方)
                           
                   精度問題
                            float的底數(shù)部分由23位二進(jìn)制組成
                            所以底數(shù)的最大值為2^23=8388607(最大為7位),所以float類型的有效數(shù)字最大為7位
 
                           
double 8個(gè)字節(jié)(采用IEEE754標(biāo)準(zhǔn))
         浮點(diǎn)數(shù)在內(nèi)存中是按科學(xué)計(jì)數(shù)法來存儲的,其整數(shù)部分始終是一個(gè)隱含著的"1"
         例如:123.45=1.2345*10^2;
         一個(gè)double類型的數(shù)據(jù)在內(nèi)存中的存儲格式為
                   符號位     指數(shù)位              底數(shù)位
                   0                00000000000  0000000 00000000 00000000 00000000 00000000 00000000 00000000 0000
                   S                 EEEEEEEEEEE  MMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMM
                   1位     11位                  52位
                   S:      1位,表示負(fù)數(shù),0表示正數(shù)
                   E:  11位,表示指數(shù),可表示數(shù)據(jù)范圍(00000000000-11111111111,對應(yīng)的十進(jìn)制為0-2047)
                                     因?yàn)橹笖?shù)可以是正數(shù)也可以是負(fù)數(shù),IEEE754標(biāo)準(zhǔn)規(guī)定:指數(shù)減去1023才是實(shí)際的指數(shù)(這是規(guī)定)
                                     float的指數(shù)表示范圍是-1023到1024;
                   M:  53位(實(shí)際只存儲52位),表示底數(shù)
                   因?yàn)樗械男?shù)都可以表示為1.xx*10^n;小數(shù)點(diǎn)前面永遠(yuǎn)是1,所以小數(shù)點(diǎn)前面一位默認(rèn)不存儲,只存儲小數(shù)點(diǎn)后面的52位
                  
                   所以double的數(shù)據(jù)范圍
                            1*-2^1024到1*2^1024  也即 -1.798E308~1.789E308(E表示10的幾次方法)
                           
                   精度問題
                            double的底數(shù)部分由52位二進(jìn)制組成
                            所以底數(shù)的最大值為最大值為2^52=4503599627370496(最大為16位),所以double類型的有效數(shù)字最大為16位
                  
        
        
         float數(shù)據(jù)十進(jìn)制和二進(jìn)制的轉(zhuǎn)換
                   23.125轉(zhuǎn)換為二進(jìn)制
                            整數(shù)和小數(shù)部分分別轉(zhuǎn)換
                                     23的二進(jìn)制
                                               23/2 11     1
                                               11/2 5       1
                                               5/2            2       1
                                              2/2            1       0
                                               1/2            0       1
                                               23的二進(jìn)制位10111
                                     0.125的二進(jìn)制
                                               0.625*2=1.25  取整1,小數(shù)部分0.25
                                               0.25*2=0.5                取整0,小數(shù)部分0.5
                                               0.5*2=1.0                  取整1,小數(shù)部分0
                                               0.125的二進(jìn)制0.101
                            23.125的二進(jìn)制10111.101
                                     10111.101將"."向左移動(dòng),直到小數(shù)點(diǎn)前面只剩1位;
                                     10111.101=1.0111101*2^4;(類比十進(jìn)制數(shù)123.456=1.23456*10^2)
                                     指數(shù):實(shí)際為4,因?yàn)镮EEE754標(biāo)準(zhǔn)規(guī)定,存儲的指數(shù)減去127才是實(shí)際的指數(shù)(這是規(guī)定)
                                                所以4+127=131轉(zhuǎn)換為二進(jìn)制才是存儲的指數(shù)10000011
                                     底數(shù):0111101(只記錄小數(shù)點(diǎn)后面即可)
                                     所以23.125在的在內(nèi)存中存儲形式為
                                     符號位     指數(shù)位            底數(shù)位
                                     0                10000011         01111010000000000000000
                  

本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://metathetuscanyresort.com/javaee
                  
                  
                   
0 分享到:
和我們在線交談!