C中运营商的相关性

时间:2016-09-05 20:31:35

标签: c associativity

从我读过的书中可以看出:

相关性可以有两种类型:
1-Left to Right
从左到右的关联性意味着左操作数必须是明确的。在什么意义上是不明智的?它不得参与任何其他子表达式的评估 2 - 从右到左
与上述相同。

现在请阅读以下代码:

progressBar

如上面的代码“d = 10/100 * p”所示,它遵循L - > R关联性,因为先前计算的p参与其他表达式的评估。
现在改变d “d = p * 10/100”这种情况正确地计算了折扣,但是高于1会给出零作为答案。

任何人都可以在上面的例子中解释相关性。

2 个答案:

答案 0 :(得分:3)

乘法*/都是从左到右的运算符。它们甚至具有相同的优先权。

因此,您的表达式可以在不改变其含义的情况下重写:

d = (10 / 100) * p
d = (p * 10) / 100

由于10 / 100是结果为0的整数除法,所以现在您可以看到差异。

答案 1 :(得分:-4)

C&C的算术*(以及-+)运算符是关联的,就像它们是数学一样:

这些行评估为true

A * B * C == (A * B) * C == A * (B * C);

(或A,B,C的任何排列,因为*也是可交换的 - 即。x*y == y*x为真)

然而,这一般情况并非如此:

A / B / C == (A / B) / C == A / (B / C);