在printf函数中使用int类型不会添加与float类型相同的值

  • 本文关键字:类型 添加 float 函数 printf int c
  • 更新时间 :
  • 英文 :


当我使用以下代码时,在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

并且由于c2都是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值。格式说明符和参数类型不匹配会导致未定义的行为

最新更新