64,685
社区成员
发帖
与我相关
我的任务
分享
就像这个样子:
#include <stdio.h>
float fltShift( float x , int n )
{
int ix = *(int*)&x;
ix += n * 0x00800000;
return *(float*)&ix;
}
double dblShift( double x , int n )
{
long long llx = *(long long*)&x;
llx += n * 0x0010000000000000LL;
return *(double*)&llx;
}
int main()
{
printf( "%f\n" , fltShift( 123.456f , -3 ) );
printf( "%f\n" , fltShift( 123.456f , -2 ) );
printf( "%f\n" , fltShift( 123.456f , -1 ) );
printf( "%f\n" , fltShift( 123.456f , 0 ) );
printf( "%f\n" , fltShift( 123.456f , 1 ) );
printf( "%f\n" , fltShift( 123.456f , 2 ) );
printf( "%f\n" , fltShift( 123.456f , 3 ) );
printf( "%f\n" , dblShift( 123.456 , -3 ) );
printf( "%f\n" , dblShift( 123.456 , -2 ) );
printf( "%f\n" , dblShift( 123.456 , -1 ) );
printf( "%f\n" , dblShift( 123.456 , 0 ) );
printf( "%f\n" , dblShift( 123.456 , 1 ) );
printf( "%f\n" , dblShift( 123.456 , 2 ) );
printf( "%f\n" , dblShift( 123.456 , 3 ) );
return 0;
}