// tttt.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
union w //32位單精度浮點數,這里使用了共用體union
{
unsigned idata; //32位浮點數的內部二進制表示對應的整數
float fdata; //32位浮點數本身
struct //各自定義32位浮點數的符號位、指數部分和尾數部分,注意這幾個位域的順序!
{
unsigned f:23; //32位浮點數的23位尾數部分
unsigned index:8; //32位浮點數的8位指數部分
unsigned sign:1; //32位浮點數的1位符號位部分
}h;
};
union ww //64位雙精度浮點數的內部二進制表示對應的整數
{
__int64 ldata; //64位雙精度浮點數的內部二進制表示對應的整數,注意__int64
double ddata; //64位雙精度浮點數本身
struct //各自定義64位雙精度浮點數的符號位、指數部分和尾數部分,注意這個幾個位域的順序!
{
unsigned f1:32; //64位雙精度浮點數的52位尾數部分的低32位
unsigned f2:20; //64位雙精度浮點數的52位尾數部分的高20位
unsigned index:11; //64位雙精度浮點數的11位指數部分
unsigned sign:1; //64位雙精度浮點數的1位符號位部分
}h;
};
int main(int argc, char* argv[])
{
w m;
m.idata =0x93534253; //直接用整數表示的32位單精度浮點數
printf("fdata:%e\n",m.fdata ); //32位單精度浮點數表示
printf("size:%d\n",sizeof(w) ); //32位單精度浮點數占用的字節數
printf("idata:%8x\n",m.idata ); //對應的32位整數
printf("sign:%1x\n",m.h.sign); //符號位
printf("index:%2x\n",m.h.index); //指數部分
printf("f:%x\n",m.h.f); //尾數部分對應的整數
__int64 longdata; //64位整數,注意__int64
ww mm; //64位雙精度浮點數公共體
mm.ddata =124.235L; //64位雙精度浮點數,這次直接使用浮點數
printf("ddata:%e\n",mm.ddata ); //64位雙精度浮點數
printf("size:%d\n",sizeof(ww) ); //占用的字節數
printf("ldata:%16I64x\n",mm.ldata ); //64位整數的16進制表示,注意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位尾數部分
printf("f:%16I64x\n",longdata); //52位尾數部分
printf("Hello World!\n");
return 0;
}
|