新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 浮點型數據存儲方式分析

        浮點型數據存儲方式分析

        作者: 時間:2016-12-01 來源:網絡 收藏
        也就是說我們可以認為float在小端CPU的編碼方式應該是:
        31<-------------------------------------------------0
        S(1bit)| E(8bits)| M(23bits) |
        即:
        -----------------------------------------------------
        ADDR0+3ADDR0+2 ADDR0+1 ADDR0
        SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
        -----------------------------------------------------
        S:表示浮點數正負,1為負數,0為正數。
        E:指數加上127后的值的二進制數
        M: 24-bit的底數(只存儲23-bit)
        需要注意,浮點數為0時,指數和底數都為0,但此前的公式不成立。因為2的0次方為1,所以,0是個特例。當然,這個特例也不用認為去干擾,編譯器會自動去識別。
        這樣我們就可以知道前面這個題中輸出的結果啦,從上面的分析可以知道一個float型的數的基本存儲方式,按照上面的實現可以知道5.0的存儲方式為如下的形式:
        01000000101000000000000000000000
        從上面的這個存儲形式我們可以得到基本的整形數值時0x40A00000。進而也就知道了4個bytes中的數值大小。
        這是充分利用了聯合體的共享內存特性,我們改變程序如下所示:
        #include
        typedefuniontest
        {
        float a;
        int i;
        char c[4];
        }Test;
        int main()
        {
        Test t;
        t.a = 5.0;
        printf("%f",t.a);
        printf("%d",t.i);
        printf("%c,%c,%c,%c",t.c[3],t.c[2],t.c[1],t.c[0]);
        t.i = 65;
        printf("%f",t.a);
        printf("%d",t.i);
        printf("%c,%c,%c,%c",t.c[3],t.c[2],t.c[1],t.c[0]);
        return 0;
        }
        根據上面的分析,可以比較方便的計算出結果如下所示:
        當然這只是我在X86系統中的輸出,在大端系統中會是什么結果我不得而知,具體的要參看IEEE標準。
        float類型的數據是比較復雜的問題,我將在后面認真研究,爭取早日解決各種問題。

        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 叙永县| 昭通市| 肥东县| 沙湾县| 双桥区| 安溪县| 大渡口区| 南昌县| 大方县| 左云县| 扬中市| 邹平县| 岑巩县| 简阳市| 永福县| 太康县| 新乡县| 永州市| 开封县| 黄山市| 武乡县| 宁陕县| 旌德县| 苏尼特右旗| 远安县| 肥乡县| 马尔康县| 蒙城县| 彭阳县| 七台河市| 文水县| 商丘市| 晋州市| 理塘县| 娱乐| 富锦市| 东港市| 孟州市| 翁源县| 水富县| 冷水江市|