iTalent12 2021-10-12 10:52 采纳率: 100%
浏览 33
已结题

为什么用%d打印出的浮点数不符合我的预期?

刚学C语言数据的存储,了解了数据的存储格式,便出现了以下问题,希望帮我解答下;
当我定义一个float型变量a时,假设a=9.0,则a在32位系统中以浮点型格式存储为0100 0001 0001 0000 0000 0000 0000 0000,此时我用整型的格式去打印这个数,我预计程序应该是将该内存取出并以整型的方式去计算,结果应该是1091567616,但实际结果却是0;
代码如下:此代码输出为0;

int main()
{
    float b = 9.0;
    //0100 0001 0001 0000 0000 0000 0000 0000
    printf("%d\n", b);
    return 0;
}

如果我把代码写成这样,结果又与我预期相符合,下列代码输出为1091567616;

int main()
{
    float b = 9.0;
    //0100 0001 0001 0000 0000 0000 0000 0000
    int* pb = (int*)&b;
    printf("%d", *pb);
    return 0;
}

这两个代码差别在哪,以及为什么第一个代码的执行结果和我的预期不相同?

  • 写回答

3条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 系统已结题 10月20日
      • 已采纳回答 10月12日
      • 创建了问题 10月12日

      悬赏问题

      • ¥15 SQL 表中 考勤记录的组合查询
      • ¥15 Power pivot无法刷新数据
      • ¥15 刚入职被要求写这种文档,应该如何下手
      • ¥15 最优经济尺寸设计问题
      • ¥15 从多元正态分布中生成3维样本
      • ¥15 GEO下载数据的处理报错 :函数‘Meta’标签‘"data.frame"’找不到继承方法,如何解决?
      • ¥15 android object box 一个实体多个表怎么写
      • ¥15 temux 启用docker 服务失败
      • ¥15 Flask 使用celery发送邮件出现‘目标计算机积极拒绝‘
      • ¥15 超时跳出方法代码的返回值问题