int a=3.14*150;
printf("%d",a);
return 0;
这很好用,输出是471
int a=3.14*150;
printf("%f",a);
return 0;
但现在输出为-0.104279 我以为int会被提升为浮动 但输出完全不同 我正在使用gcc 4.7.2 ubuntu 12.10
答案 0 :(得分:2)
使用printf
的错误转换说明符是未定义的行为。 (对于scanf
也是如此)。
现在,%f
转换说明符意味着int
变量a
的位将被解释为浮点值。浮点值通常按IEEE Standard for Floating-Point Arithmetic (IEEE 754)实现,但标准并未强制要求。这就解释了为什么你的输出不是你所期望的。
答案 1 :(得分:1)
printf
不会检查元素类型 - 它假设您是诚实的,并且您实际上正在传递您所说的您将要通过的内容。它的未定义行为打印类型与指定符不匹配。
答案 2 :(得分:0)
尺寸不同,因此这是未定义的行为。根据格式字符串中的信息,不能进行任何促销,而不是语言的工作方式。 printf()
函数只是一个函数。