为什么在我的程序中从 float 隐式转换为 double return 是一个无意义的数字?
Why does implicit casting from float to double return a nonsense number in my program?
我正在做一项介绍 C 编程的实验作业class,我们正在学习转换。
作为练习的一部分,我必须编写这个程序并解释每个练习中发生的转换:
#include <stdio.h>
int main(void)
{
int a = 2, b = 3;
float f = 2.5;
double d = -1.2;
int int_result;
float real_result;
// exercise 1
int_result = a * f;
printf("%d\n", int_result);
// exercise 2
real_result = a * f;
printf("%f\n", real_result);
// exercise 3
real_result = (float) a * b;
printf("%f\n", real_result);
// exercise 4
d = a + b / a * f;
printf("%d\n", d);
// exercise 5
d = f * b / a + a;
printf("%d\n", d);
return 0;
}
我得到以下输出:
5
5.000000
6.000000
1074921472
1075249152
对于最后两个输出,进行的数学运算产生浮点值。由于存储它们的变量是 double 类型,从 float 到 double 的转换不应该影响值,不是吗?但是当我打印出 d
的值时,我得到了输出中显示的垃圾数字。
有人可以解释一下吗?
But when I print out the value of d, I get garbage numbers as shown in the output.
您正在使用 %d
作为格式,而不是 %f
或 %lf
。当格式说明符和参数类型不匹配时,你会得到未定义的行为。
%d
接受一个 int
(并以十进制格式打印)。
%f
需要 double
.
%lf
是错误 (C89) 或等效于 %f
(C99 起)。
我正在做一项介绍 C 编程的实验作业class,我们正在学习转换。
作为练习的一部分,我必须编写这个程序并解释每个练习中发生的转换:
#include <stdio.h>
int main(void)
{
int a = 2, b = 3;
float f = 2.5;
double d = -1.2;
int int_result;
float real_result;
// exercise 1
int_result = a * f;
printf("%d\n", int_result);
// exercise 2
real_result = a * f;
printf("%f\n", real_result);
// exercise 3
real_result = (float) a * b;
printf("%f\n", real_result);
// exercise 4
d = a + b / a * f;
printf("%d\n", d);
// exercise 5
d = f * b / a + a;
printf("%d\n", d);
return 0;
}
我得到以下输出:
5
5.000000
6.000000
1074921472
1075249152
对于最后两个输出,进行的数学运算产生浮点值。由于存储它们的变量是 double 类型,从 float 到 double 的转换不应该影响值,不是吗?但是当我打印出 d
的值时,我得到了输出中显示的垃圾数字。
有人可以解释一下吗?
But when I print out the value of d, I get garbage numbers as shown in the output.
您正在使用 %d
作为格式,而不是 %f
或 %lf
。当格式说明符和参数类型不匹配时,你会得到未定义的行为。
%d
接受一个 int
(并以十进制格式打印)。
%f
需要 double
.
%lf
是错误 (C89) 或等效于 %f
(C99 起)。