有关float型变量在内存中的保存

参考资料:http://zh.wikipedia.org/wiki/IEEE_754


1 8 23位长
S Exp Fraction
31 30至23
偏正值(实际的指数大小+127)
22至0位编号(从右边开始为0)

最近研究快速开方的算法,涉及到浮点型数字的储存

先上代码


#include <stdio.h>
//#include <windows.h>

int main(int argc,char *argv[])
{
	int i;
	float f;
	printf("f地址:0x%x",&f);
	while(1)
	{
		printf("\n请输入一个浮点数:\t输入0.0结束\n");
		scanf("%f",&f);
		i = *(int *)&f;
		printf("整数%d\t\n",i);
		printf("%x\t",(i&0x80000000)>>31); 
		printf("%x\t",(i&0x7f800000)>>23);
		printf("%x\t",(i&0x007fffff)>>0);
		printf("\n");
		
		if(i&0x80000000)
		{
			printf("-");
		} else {
			printf("+");
		}
		printf("\t");
		printf("%d\t",((i&0x7f800000)>>23)-127);
		printf("%f\t",(float)(i&0x007fffff)/0x007fffff);
		printf("\n");
		printf("十六进制%x\n",i);	
		if(0 == i) break;
	}
//	system("pause");
	return 0;
}

举例说明

8.5  = 1.0625 * 2^3

故8.5的储存方式为

+       +3              0.0625
+(0)    +3(3+127=0x82)  0.0625(1/8)

对映翻译成保存的段 即

0    0x82    80000




有关float型变量在内存中的保存

其余的尝试可以自行进行


64bit的double类似 


1 11 52位长
S Exp Fraction
63 62至52
偏正值(实际的指数大小+1023)
51至0位编号(从右边开始为0)

我就不代码验证了,大家有兴趣的自己来吧


你可能感兴趣的:(c,测试,float,浮点,RAM)