|
// 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;
}
|
|