相关性解释?

时间:2015-08-31 09:12:59

标签: c

在C中,我们经常说运算符是左关联的和右关联的, 例如,左关联运算符从左侧开始并在用户右侧结束。

例如,如果在x=y;x=5的赋值运算符y=20的情况下,就像在y中说x的值,就好像非常合法。

但在像if(x>y)这样的情况下,'>`运算符已离开关联性。 意味着它计算是x大于y吗? FALSE

但是,为什么我们这样做,我们也可以说从正确的相关性阅读 y小于x吗? FALSE

为什么在两种情况下输出都相同时使用左关联性?

如Mat所说,对于三元手术。

x>y>z的答案实际上取决于方向,答案将从右到左,从左到右不等。但这是因为在不同阶段进行了不同的比较。

这两个答案都会评估一个值,但为什么我们说我们只会选择一个左关联的

3 个答案:

答案 0 :(得分:2)

您对运营商优先级和运营商关联性感到困惑。

运算符关联仅适用于具有相同优先级的运算符。例如:

1 - 2 + 3

+-具有相同的优先级,并且它们是左关联的,这意味着上述内容相当于:

(1 - 2) + 3

答案 1 :(得分:1)

只有当表达式有多个运算符时,关联概念才会发挥作用。它是表达式中运算符的属性,而不是操作数。它定义了如何插入括号,而不是操作符的含义。

operator       : Some R
expression     : x R y R z
left to right  : (x R y) R z
right to left  : x R (y R z)

修改 Reference of operator associativity in C

答案 2 :(得分:1)

您在关联性可读性之间感到困惑。

  

为什么在两种情况下输出都相同时使用左关联性?

这对于可读性是正确的,但对于表达式的所有评估都不是。

考虑:

x=10, y=20, z=10

现在,从左到右的关联性

x<y<z => (x<y)<z => (10<20)<10 => (1<10) =>TRUE

现在,恢复关联性的权利

x<y<z => x<(y<z) => 10<(20<10) => (10<0) =>FALSE

现在,关联性的概念只有在存在多个相同运算符的情况下才会到达。