雪中听风205 2022-09-17 15:58 采纳率: 0%
浏览 30

float在内存中如何存储

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

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

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

img

  • 写回答

2条回答 默认 最新

  • a5156520 2022-09-17 16:27
    关注

    这是因为%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;
    } 
    

    img

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 9月17日

悬赏问题

  • ¥15 IMageEN获得图形顶点坐标的问题
  • ¥50 软件PC客户端抓包,获取http请求和响应
  • ¥15 手机被安装黑客软件怎么办?
  • ¥15 Windows C++ PaddleOcr 中文模型的训练方法
  • ¥15 c# 用scottplot画 以时间为纵坐标,数值为横坐标画曲线图
  • ¥15 手机应用程序安装异常
  • ¥15 grbl的G92修改MPos的问题。
  • ¥15 vue2中,Ant Design Pro s-table中,使用服务端排序怎么做
  • ¥15 阿里巴巴国际站的商品详细页如何做到图文分离
  • ¥15 根据质因子个数求因式个数