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

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

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

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

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

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