float機器表示

  • float 類型的數據表示; float類型數字在計算機中用4個字節存儲。遵循IEEE-754格式標準:一個浮點數有2部分組成:底數m和指數e
  • 底數部分 使用二進制數來表示此浮點數的實際值 指數部分 佔用8bit的二進制數,可表示數值範圍爲0-255,但是指數可正可負,所以,IEEE規定,此處算出的次方必須減去127纔是真正的指數。所以,float類型的指數可從-127到128,底數部分實際是佔用24bit的一個值,但是最高位始終爲1,所以,最高位省去不存儲,在存儲中佔23bit

  • 科學計數法。

    格式: SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM S表示浮點數正負
    E指數加上127後的值得二進制數據 M底數

    舉例:
    17.625在內存中的存儲

  • 首先要把17.625換算成二進制:10001.101

      整數部分,除以2,直到商爲0,餘數反轉。
      小數部分,乘以2,直到乘位0,進位順序取。
    
  • 再將10001.101右移,直到小數點前只剩1位:
    1.0001101 * 2^4 因爲右移動了四位 這個時候,我們的底數和指數就出來了 底數: 因爲小數點前必爲1,所以IEEE規定只記錄小數點後的就好。所以,此處的底數爲:0001101指數:實際爲4,必須加上127(轉出的時候,減去127),所以爲131。也就是10000011,符號部分是整數,所以是0

  • 綜上所述,17.625在內存中的存儲格式是: 01000001 10001101 00000000 00000000

    1. 測試:浮點數的表達方式;
      12.25f的二進制表達方式 -0.125f的二進制表達方式

    符號位爲正,指數位爲正的情況; 首先是整數部分; 1100 整數部分最高爲爲1; 小數部分: 01; 01111111
    1100.01;那麼左移動三位1.10001 //對應的指數爲3; 3+127那麼對應的是對應是10000010 對應底數爲1.10001,所以爲因爲小數點前必定爲1;去掉對應的1得到10001;所以最後出現的數爲01000001010001000000000000000000
    爲什麼加127?
    由於質數可能出現負數,十進制127可以表示爲二進制數IEEE編碼方式規定,當質數小於01111111時候爲一個負數,反之爲正數; 因此將01111111看做是0的基數;
    -127 補碼0x1000001; 0x10000001+0x01111111=0x00000000小於0x01111111所以爲負數;對應數爲0x00000000-0x011111111=0x10000001,表示的是負數-127;

    符號位爲負,指數位爲負的情況
    0.125首先表達爲0.001;意思就是右移3位使得最高位爲1; 則底數爲000000000000000000000 指數位-3+127 //因爲127作爲基準可以準確判斷出指數的正負; 0xfd+01111111=0x11111101+01111111=01111100;
    二進制中的顯示爲 符號位1 指數位01111100 底數爲00000000000000000000000;
    10111110000000000000000000000000; 0xBE000000;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章