/*
时间:2011年10月9日17:04:25
功能:输入一个float型数,输出其在内存中存储的2进制码
备注:输入0时的输出状态不对
*/
# include <stdio.h>
int main()
{
float x;
int i;
int e;
int a[ 32];
printf( " 输入浮点数:\n ");
scanf( " %f ",&x);
if (x>= 0.0) // 符号位表示浮点数的正负
{
a[ 0]= 0;
}
else
{
a[ 0]= 1;
x = -x;
}
if (x<= 1.0)
{
for(e= 0; e>- 128; --e) // 规定尾数必须是一个大于1小于2的小数(比如1.25)
{
if(x>= 1.0 && x< 2.0)
{
break;
}
x *= 2.0;
}
}
else
{
for(e= 0; e< 128; ++e)
{
if(x>= 1.0 && x< 2.0)
{
break;
}
x /= 2.0;
}
}
x -= 1.0; // 这样的话系统默认有一个1,因此只需要存储后面的0.25(1就不需要存储了),0.25用二进制表示是0.01,再去掉(0.)就成为01。
for (i= 9; i< 32; ++i)
{
x *= 2.0;
if(x>= 1.0)
{
a[i]= 1;
x -= 1.0;
}
else
{
a[i]= 0;
}
}
if(e> 0) // 如果指数为0,则用01111 1111表示(即10进制的127,在此基础上加或减),比如1用1000 0000表示,-1用0111 1110表示。依此类推。
{
e = e- 1;
a[ 1]= 1;
}
else
{
e = e+ 127;
a[ 1]= 0;
}
for (i= 8; i> 1; --i)
{
a[i] = e% 2;
e = e/ 2;
}
printf( " SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM\n "); // S表示符号位,X表示阶数,M表示尾数
for (i= 0; i< 32; ++i)
{
printf( " %d ",a[i]);
if ( 3==i% 4)
{
printf( " ");
}
}
printf( " \n ");
return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
输入浮点数:
2.0
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
0100 0000 0000 0000 0000 0000 0000 0000
Press any key to continue
输入浮点数:
-2.0
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
1100 0000 0000 0000 0000 0000 0000 0000
Press any key to continue
输入浮点数:
1
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
0011 1111 1000 0000 0000 0000 0000 0000
Press any key to continue
输入浮点数:
0.75
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
0011 1111 0100 0000 0000 0000 0000 0000
Press any key to continue
输入浮点数:
2.5
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
0100 0000 0010 0000 0000 0000 0000 0000
Press any key to continue
输入浮点数:
0.1
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
0011 1101 1100 1100 1100 1100 1100 1101
Press any key to continue
输入浮点数:
0
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
0000 0000 -1000 0000 0000 0000 0000 0000
Press any key to continue
————————————
*/
时间:2011年10月9日17:04:25
功能:输入一个float型数,输出其在内存中存储的2进制码
备注:输入0时的输出状态不对
*/
# include <stdio.h>
int main()
{
float x;
int i;
int e;
int a[ 32];
printf( " 输入浮点数:\n ");
scanf( " %f ",&x);
if (x>= 0.0) // 符号位表示浮点数的正负
{
a[ 0]= 0;
}
else
{
a[ 0]= 1;
x = -x;
}
if (x<= 1.0)
{
for(e= 0; e>- 128; --e) // 规定尾数必须是一个大于1小于2的小数(比如1.25)
{
if(x>= 1.0 && x< 2.0)
{
break;
}
x *= 2.0;
}
}
else
{
for(e= 0; e< 128; ++e)
{
if(x>= 1.0 && x< 2.0)
{
break;
}
x /= 2.0;
}
}
x -= 1.0; // 这样的话系统默认有一个1,因此只需要存储后面的0.25(1就不需要存储了),0.25用二进制表示是0.01,再去掉(0.)就成为01。
for (i= 9; i< 32; ++i)
{
x *= 2.0;
if(x>= 1.0)
{
a[i]= 1;
x -= 1.0;
}
else
{
a[i]= 0;
}
}
if(e> 0) // 如果指数为0,则用01111 1111表示(即10进制的127,在此基础上加或减),比如1用1000 0000表示,-1用0111 1110表示。依此类推。
{
e = e- 1;
a[ 1]= 1;
}
else
{
e = e+ 127;
a[ 1]= 0;
}
for (i= 8; i> 1; --i)
{
a[i] = e% 2;
e = e/ 2;
}
printf( " SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM\n "); // S表示符号位,X表示阶数,M表示尾数
for (i= 0; i< 32; ++i)
{
printf( " %d ",a[i]);
if ( 3==i% 4)
{
printf( " ");
}
}
printf( " \n ");
return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
输入浮点数:
2.0
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
0100 0000 0000 0000 0000 0000 0000 0000
Press any key to continue
输入浮点数:
-2.0
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
1100 0000 0000 0000 0000 0000 0000 0000
Press any key to continue
输入浮点数:
1
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
0011 1111 1000 0000 0000 0000 0000 0000
Press any key to continue
输入浮点数:
0.75
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
0011 1111 0100 0000 0000 0000 0000 0000
Press any key to continue
输入浮点数:
2.5
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
0100 0000 0010 0000 0000 0000 0000 0000
Press any key to continue
输入浮点数:
0.1
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
0011 1101 1100 1100 1100 1100 1100 1101
Press any key to continue
输入浮点数:
0
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
0000 0000 -1000 0000 0000 0000 0000 0000
Press any key to continue
————————————
*/