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日