当我使用以下代码时,在printf
函数中添加和时,输出结果为0,但当我添加printf
函数时,它应该是printf("test: %d", c/ 2);
。输出为1为什么?
int main() {
float a = 1.5;
int b = 2;
int c = a + b;
printf("test: %d", (a+b)/ 2);
}
由于将a + b
的结果分配给int
变量,其结果将被截断。
因此,当1.5 + 2
的结果是3.5
时,分配给c
的结果将是整数3
。
并且由于c
和2
都是int
值,所以c / 2
的结果将是将被截断的int
。因此,CCD_ 15的结果将简单地为CCD_ 16。
通过编辑和新打印:
printf("test: %d", (a+b)/ 2);
因为表达式a + b
中涉及的值之一是float
,所以结果将是float
。正因为如此,除法的结果也为float
。
(a + b) / 2
的结果将是float
。但由于它是作为参数传递给像printf
这样的可变参数函数的,因此它将被提升为double
。所以你的陈述基本上等同于:
printf("test: %d", (double)((a+b)/ 2));
现在来看大问题:%d
格式说明符需要一个int
值。格式说明符和参数类型不匹配会导致未定义的行为。