该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/*************************************************************************
> File Name: float_decimal.c
> Author:wangfeilong
> Mail:
> NOTE:32位机。
> Created Time: 2019年07月08日 星期一 04时10分37秒
************************************************************************/
#include
#include
extern void printf_bit(int *array,int count);
extern void array_bit(int array_len,float need_data);
int main(int argn,char *argv[])
{
float data_float =0;
int scanf_judeg =0;
while(1)
{
scanf_judeg =scanf("%f",&data_float);
printf("io:%d,%d\n",scanf_judeg,sizeof(float));
if( -1 == scanf_judeg )
{
printf("quit\n");
return 0;
}
if( !scanf_judeg )
{
printf("please input float_data\n");
while( getchar() != '\n');
continue;
}
if( data_float >-1e-6 && data_float <1e-6)
{
printf("无小数位\n");
continue;
}
if( 4 == sizeof(float) )
{
array_bit(32-1-8+1,data_float);
}
}
return 0;
}
void array_bit(int array_len,float need_data)
{
int move =0x80000000;
int count =0;
int integer_number =0;
int copy_data = *((int *)&need_data);
int array[array_len];
memset(array,0,sizeof(array));
copy_data =copy_data <<1;
integer_number = (unsigned char)*(((char *)©_data)+3)-127;
printf("p:%d\n",integer_number);
if( integer_number >= 0 )
{
copy_data =copy_data << (8+integer_number);
}
else if( integer_number < 0)
{
integer_number =0-integer_number;
copy_data =copy_data << (8+integer_number);
for( count; count
{
array[count] =0;
if( count == integer_number-1 )
{
array[count] =1;
count++;
break;
}
}
}
move = move >> (32-8-integer_number-1);
copy_data = copy_data & move;
printf("move=%d,copy_data=%d\n",move,copy_data);
do
{
for( count; count < array_len; )
{
if( copy_data >0 )
{
printf("r\n");
array[count++] =0;
}
if( copy_data <0 )
{
printf("tt\n");
array[count++] =1;
}
copy_data =copy_data <<1;
break;
}
}while(copy_data);
printf_bit( array,count);
return ;
}
void printf_bit(int *array,int count)
{
int head =0;
printf("小数位:0b");
for( ; head< count; head++)
{
printf("%d",array[head]);
}
putchar('\n');
return ;
}