McaT怎么读 2022-12-04 21:08 采纳率: 91.7%
浏览 10
已结题

学习c语言宏定义遇到的问题

在学习c语言时遇到以下问题;

为什么下面代码中最终的输出结果为0.000000?

#include <stdio.h>
//#define PT 5.5
//#define S(x) PT*x*x
int main() {
    int a = 1, b = 2;
//    printf("%f\n", S(a + b));
//    printf("%f\n", S(3));
//    printf("%f\n", S(2));
//    printf("%f\n", S(1));
    printf("%f\n", a + b );
    return 0;
}

代码基本不变但是把注释取消了
这时为什么最后一条的输出又变成了5.500000?
并且发现改动a、b的值其结果不变,反而随宏定义中PT变化而变化

#include <stdio.h>
#define PT 5.5
#define S(x) PT*x*x
int main() {
    int a = 1, b = 2;
    printf("%f\n", S(a + b));
    printf("%f\n", S(3));
    printf("%f\n", S(2));
    printf("%f\n", S(1));
    printf("%f\n", a + b );
    return 0;
}

输出结果:

9.500000
49.500000
22.000000
5.500000
5.500000
  • 写回答

1条回答 默认 最新

  • 浪客 2022-12-04 21:22
    关注

    float内存中保存的方式跟int不一样。float内存中按IEEE的规范保存。

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月17日
  • 已采纳回答 12月9日
  • 创建了问题 12月4日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 易优eyoucms关于二级栏目调用的问题
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题