C语言的促销顺序

时间:2014-09-06 02:26:42

标签: c type-promotion

我们知道类型会得到提升。例如,如果你写:

int i = 2;
double d = 4.0;
double result = i / d;

。 。 。然后int将升级为double,结果为0.5。但是,如果促销和评估订单发生冲突,我无法找到任何相关信息(谷歌也难以置信)。例如:

int i = 2;
int j = 4;
double d = 1.0;
double result = d * i / j;

在此示例中,值取决于促销发生的时间。如果在分割之前i被提升,则结果将为0.5,但如果i / j的结果被提升,则会发生整数除法,结果为0.0

结果定义明确吗?它在C ++和其他C语言中是否相同?

2 个答案:

答案 0 :(得分:2)

  

结果是明确定义的结果吗?

  

在C ++和其他C派生语言中是否相同?

C++ - 是的。但“C-derived languages”的定义并不明确,所以很难回答。

评估顺序

d * i / j

(d * i) / j

因此,由于i,首先double被提升为d * i

然后,结果(double)必须除以j,因此j会被提升为double。所以有两个促销

然而,

d + i / j

操作顺序不同。首先,使用整数算术完成i / j除法,然后将结果提升为double。因此,只有一次促销

答案 1 :(得分:1)

我认为促销活动与营业顺序相同。当编译器看到行

double result = d * i / j;

它将这条线分解为:

double result;
result = d * i;
result = result / j;

在将其转换为机器代码之前。