float在内存中如何存储

问题遇到的现象和发生背景

软件codeblocks 存储0.333333时 为什么内存的内容不一样,但10进制下输出一样

用代码块功能插入代码,请勿粘贴截图
运行结果及报错内容

img

这是因为%d 和%x 是用于打印整数的,用他来打印浮点数会出现差错的,%f打印同一个浮点数结果会是相同的(j/k那个应该会有转换过程);浮点数的存储规则和整数的存储规则不同,用于打印浮点数的有个类似的十六进制形式记数法在C99和C11叫p记数法,可以试试,测试代码如下:
参考链接:


https://zhidao.baidu.com/question/519682239.html

https://blog.csdn.net/weixin_58553177/article/details/125020085

#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;
} 

img