浮點數在內存中的存儲方式


任何數據在內存中都是以二進制的形式存儲的。浮點數也不例外。浮點的存儲方式與整數有一點區別就是:浮點的存儲方式是采用:符號位+階碼+尾數的形式。
符號位:在計算機內存中,通常都是以一位表示正數(用0表示)或者負數(用1表示)
階碼:在機器中表示一個浮點數時需要給出指數,這個指數用整數形式表示,這個整數叫做階碼,階碼指明了小數點在數據中的位置。它與科學計數法中的冪是一個道理。
尾數:指小數點后面的數
 
例:
將133.5f化為二進制數。首先將整數部分化為二進制數為
        1000 0101
然后將小數部分化為二進制為0.1。則133.5的二進制數為
        1000 0101.1
而在計算機中是怎么樣存儲這個數的呢?首先將這個二進制數用“科學計數法”的形式表示出來就是
        1.0000 1011 * 2^7
這里階碼采用移碼表示,對於float型數據其規定偏置量為127,階碼位數為8位(對於雙精度來說,其規定的偏置量為1023。階碼位數為11位。),也就是說這里的階碼應該為127+7 = 134。將其化為二進制數為
           1000 0110
由於規定小數點前面都為1,因此在計算機中,將不會存儲小數點前面的1。這里的尾數就為00001011。其后全部補0,將其補充到23位。這里是正數,所以符號位為0。
在存儲時,符號位在最前面,其次是階碼,最后放尾數。因此數字在內存中存儲為:
        0100 0011 0000 0101 1000 0000 0000 0000
其十六進制表示為:
        0x43058000
以下為測試代碼:
#include <stdio.h>

int main()
{
    float num = 133.5f;
    int *p = (int *)&num;
    printf("0x%x\n", *p);
    return 0;
}

 

上機運行可得到輸出結果為: 0x43058000


免責聲明!

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



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