在学习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
float内存中保存的方式跟int不一样。float内存中按IEEE的规范保存。