找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5338|回復(fù): 0
收起左側(cè)

VC++6.0 中的64位整數(shù)以及浮點數(shù)格式

[復(fù)制鏈接]
ID:94349 發(fā)表于 2015-11-2 14:24 | 顯示全部樓層 |閱讀模式
// tttt.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

union w                    //32位單精度浮點數(shù),這里使用了共用體union
{
    unsigned idata;    //32位浮點數(shù)的內(nèi)部二進(jìn)制表示對應(yīng)的整數(shù)
    float fdata;            //32位浮點數(shù)本身
    struct   //各自定義32位浮點數(shù)的符號位、指數(shù)部分和尾數(shù)部分,注意這幾個位域的順序!
    {
        unsigned f:23;    //32位浮點數(shù)的23位尾數(shù)部分
        unsigned index:8;    //32位浮點數(shù)的8位指數(shù)部分
        unsigned sign:1;       //32位浮點數(shù)的1位符號位部分
    }h;
};

union ww            //
64位雙精度浮點數(shù)的內(nèi)部二進(jìn)制表示對應(yīng)的整數(shù)
{
    __int64 ldata;   
//64位雙精度浮點數(shù)的內(nèi)部二進(jìn)制表示對應(yīng)的整數(shù),注意__int64   
    double ddata;   
//64位雙精度浮點數(shù)本身
    struct  
//各自定義64位雙精度浮點數(shù)的符號位、指數(shù)部分和尾數(shù)部分,注意這個幾個位域的順序!
     {
        unsigned f1:32;   
//64位雙精度浮點數(shù)的52位尾數(shù)部分的低32位
        unsigned f2:20;  
//64位雙精度浮點數(shù)的52位尾數(shù)部分的高20位
        unsigned index:11;
//64位雙精度浮點數(shù)的11位指數(shù)部分        
        unsigned sign:1;
    //64位雙精度浮點數(shù)的1位符號位部分
     }h;
};

int main(int argc, char* argv[])
{
    w m;

    m.idata =0x93534253;    //直接用整數(shù)表示的32位單精度浮點數(shù)
    printf("fdata:%e\n",m.fdata );    //
32位單精度浮點數(shù)表示
    printf("size:%d\n",sizeof(w) );    //
32位單精度浮點數(shù)占用的字節(jié)數(shù)           
    printf("idata:%8x\n",m.idata );    //對應(yīng)的32位整數(shù)
    printf("sign:%1x\n",m.h.sign);    //符號位
    printf("index:%2x\n",m.h.index);    //指數(shù)部分
    printf("f:%x\n",m.h.f);                    //尾數(shù)部分對應(yīng)的整數(shù)

    __int64 longdata;    //64位整數(shù),注意__int64
    ww mm;    //64位雙精度浮點數(shù)公共體
    mm.ddata =124.235L;    //64位雙精度浮點數(shù),這次直接使用浮點數(shù)

    printf("ddata:%e\n",mm.ddata );    //
64位雙精度浮點數(shù)
    printf("size:%d\n",sizeof(ww) );       //占用的字節(jié)數(shù)
    printf("ldata:%16I64x\n",mm.ldata ); //64位整數(shù)的16進(jìn)制表示,注意
16I64x        printf("sign:%x\n",mm.h.sign);
    printf("index:%x\n",mm.h.index);

    longdata=__int64(mm.h.f1)|(__int64(mm.h.f2)<<32);    //組合成52位尾數(shù)部分
    printf("f:%16I64x\n",longdata);        //52位尾數(shù)部分

    printf("Hello World!\n");
    return 0;
}







回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表