Java語言中:float數據類型在內存中是怎么存儲的?


=============================================================================
java語言中,float類型數字在計算機中用4個字節來存儲。遵循IEEE-754格式標准:
即:一個浮點數有2部分組成:底數m和指數e
---------------------------------------
底數m部分:使用二進制數來表示此浮點數的實際值。
指數e部分:占用8bit(1個字節)的二進制數,可表示數值范圍為0-255。
---------------------------------------
但是指數可正可負,所以,IEEE規定,此處算出的次方必須減去127才是真正的指數。
所以,float類型的指數可從-126到128。
---------------------------------------
底數部分實際是占用24bit(3個字節)的一個值,但是最高位始終為1,所以,最高位省去不存儲,在存儲中占23bit。
---------------------------------------
科學計數法。
  格式:
    SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
    S表示浮點數正負;
    E表示指數加上127后的值后得二進制數據;
    M表示底數。
  舉例:
    17.625在內存中的存儲為:
    首先要把17.625換算成二進制:10001.101
---------------------------------------
    整數部分:除以2,直到商為0,余數反轉。(即:模2取余法)
    17 / 2 = 8 --- 1
    8 / 2 = 4 --- 0
    4 / 2 = 2 --- 0
    2 / 2 = 1 --- 0
    1 / 2 = 0 --- 1
    小數部分:乘以2,直到乘位為0,進位順序取。(即:乘2取整法)
    按如下算法進行:
      1)首先給小數部分乘2,得到的數,如果小數點前為1;則計1,為0,則計0。
      2)再對剩下的小數部分乘2,再計出1或0。
      3)重復以上步驟,直至達到需要的精度。
    0.625 x 2 = 1.2   --- 計為1
    0.3 x 2 = 0.6       --- 計為0
    0.6 x 2 = 1.2       --- 計為1
    0.2 x 2 = 0.4       --- 計為0
              ......(算到需要的精度為止)

    再例如:
    0.5 x 2 = 1.0     --- 計為1
    0 x 2 = 0    --- 結束
    所以:0.5(D) = 0.1(B)

          十           二

---------------------------------------
  再將10001.101右移,直到小數點前只剩1位:
  1.0001101 * 2^4 因為右移動了四位,
---------------------------------------
  這個時候,我們的底數和指數就出來了。
    底數:因為小數點前必為1,所以IEEE規定只記錄小數點后的就好。所以,此處的底數為:0001101
    指數:實際為4,必須加上127(轉出的時候,減去127),所以為131。也就是10000011
  符號部分是正數,所以是0
  綜上所述,17.625在內存中的存儲格式是:
  01000001 10001101 00000000 00000000
---------------------------------------
  換算回去:自己做。
=============================================================================


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM