当我执行此代码时,它返回1610612736
void main(){
float a=3.3f;
int b=2;
printf("%d",a*b);
}
为什么以及如何解决这个问题?
编辑:它甚至不是整数和浮点数,如果我替换int b = 2:浮点数b = 2.0f它返回相同的愚蠢结果
答案 0 :(得分:11)
float
和int
相乘的结果是float
。除此之外,它会在传递给double
时升级为printf
。您需要%a
,%e
,%f
或%g
格式。 %d
格式用于打印int
类型。
编辑说明:main
的返回值应为int
。这是一个固定的程序:
#include <stdio.h>
int main(void)
{
float a = 3.3f;
int b = 2;
printf("%a\n", a * b);
printf("%e\n", a * b);
printf("%f\n", a * b);
printf("%g\n", a * b);
return 0;
}
及其输出:
$ ./example
0x1.a66666p+2
6.600000e+00
6.600000
6.6
答案 1 :(得分:2)
或者,您也可以
printf("%d\n", (int)(a*b));
这将打印出您(期待)的结果。
您应该始终明确地对变量进行类型转换以匹配格式字符串,否则您可能会看到打印出一些奇怪的值。