【问题标题】:Implicit Conversion in CC 中的隐式转换
【发布时间】:2015-08-29 15:53:47
【问题描述】:

在下面的c sn-p中,隐式类型转换是如何发生的?输出会是什么?

#include<stdio.h>

void main()
{
    float f = (1/2)+(1.0/2)+(1.0/2.0);
    double d = 1/2;
    printf("%f \n %d",f,d);

}

【问题讨论】:

  • Wellcom 到 SO。您尤其不了解哪种转换?你有没有努力回答这个问题?这是哪里来的,你只是把作业丢给我们吗?
  • 先生,我做了我的研究,我发现当 1. 将整数变量分配给浮点或双精度数据类型时,它会得到提升;2.当浮点或双精度数据类型分配给 int 或 char 时,值会得到被截断。我无法分析混合表达式中的场景。谢谢
  • 在 AMCAT 考试中提出了类似的问题,我无法回答。

标签: c implicit-conversion


【解决方案1】:

1/2 是一个整数除以一个整数,得到一个整数值,即 0(.5 被截断)

1.0/2 是一个整数除以一个双精度值。所以 2(整数值)被提升为双精度类型,然后进行除法,给出双精度值。所以结果值为 0.5。

1.0/2.0 导致一个双精度除以另一个双精度,结果只是双精度类型的 0.5。

最后将所有这些都添加到 1.0 中,它是 double 类型。然后将其转换为浮点类型,因为 f 是浮点类型变量。

此外,使用 %d 说明符打印双精度类型值会导致未定义的行为。请参阅post

【讨论】:

  • 不客气。如果对您有帮助,请随时接受我的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多