从浮点数在内存的存储看
如:
#include <stdio.h>
void fm(float a)
{
unsigned int *b = (unsigned int *)&a;
printf("%d ", (*b>>31)&1);
int i;
for (i=30; i>22; --i)
printf("%d", (*b>>i)&1);
printf(" ");
for (i=22; i>=0; --i)
printf("%d", (*b>>i)&1);
printf("\n");
}
float mf(char *p)
{
float a=1.0, b=0.0;
for (++p; *p; ++p)
{
a /= 2;
if (*p=='1')
b += a;
}
return b;
}
main()
{
fm(1.0/3*3);
fm(0.333333*3);
printf("0.111111111111111111101111 = %f\n", mf(".111111111111111111101111")); //二进制小数转10进制
}
浮点数在内存的存储,包括符号位、阶码E、尾数M。
浮点表示的一般形式为:R=M*2^e (e=E-127)
32位编译的float类型:
符号1位;阶码(E)8位, e=E-127;尾数23位,实际精度为24位(最高位恒为1,不必存储)。
[此贴子已经被作者于2017-9-28 00:53编辑过]