http://blog.csdn.net/Tunix126/archive/2006/10/17/1338464.aspx
这里有个网站,可以帮助理解,也可以验证过自己写的程序是否正确,
#include <stdio.h>
typedef unsigned long u32;
typedef struct x_double_type_t x_double_type;
struct x_double_type_t
{
u32 low_32;
u32 hi_32 ;
};
#define double x_double_type
void f2d( float f , double *x )
{
u32 a , b;
u32 uf = *(u32*)&f;
u32*ux = (u32*)x;
ux[0] = ux[1] = 0;
ux[1] |= uf&0x80000000;
a = (uf&0x7f800000)>>23;
b = uf&0x7fffff;
a += 1024 - 128;
ux[1] |= a<<20;
ux[1] |= b>>3 ;
ux[0] |= b<<29;
}
int main()
{
float f = 3.14159265f;
double x;
f2d( f , &x );
printf( "%lf/n" , x );
while( 1 == scanf( "%f" , &f ) )
{
f2d( f , &x );
printf( "%lg/n" , x );
}
return 0;
}
初学时候对格式的理解存在一个误区,这个误区实际上来自网络,今天终于好好理解了一番。http://www.ebookee.net/IEEE-float-dl/