问题遇到的现象和发生背景
软件codeblocks 存储0.333333时 为什么内存的内容不一样,但10进制下输出一样
软件codeblocks 存储0.333333时 为什么内存的内容不一样,但10进制下输出一样
这是因为%d 和%x 是用于打印整数的,用他来打印浮点数会出现差错的,%f打印同一个浮点数结果会是相同的(j/k那个应该会有转换过程);浮点数的存储规则和整数的存储规则不同,用于打印浮点数的有个类似的十六进制形式记数法在C99和C11叫p记数法,可以试试,测试代码如下:
参考链接:
#include <stdio.h>
int main(void){
float i,j=1,k=3,l=0.333333;
i=j/k;
int a= 15;
printf("%x\n",a);
printf("%d\n",a);
printf("\n");
printf("%x\n",i);
printf("%a\n",i);
printf("%d\n",i);
printf("%f\n",i);
printf("\n",i);
printf("%x\n",l);
printf("%a\n",i);
printf("%d\n",l);
printf("%f\n",l);
printf("\n");
printf("%x\n",0.333333);
printf("%a\n",0.333333);
printf("%d\n",0.333333);
printf("%f\n",0.333333);
return 0;
}