在C中,我们经常说运算符是左关联的和右关联的, 例如,左关联运算符从左侧开始并在用户右侧结束。
例如,如果在x=y;
和x=5
的赋值运算符y=20
的情况下,就像在y
中说x
的值,就好像非常合法。
但在像if(x>y)
这样的情况下,'>`运算符已离开关联性。
意味着它计算是x大于y吗? FALSE
但是,为什么我们这样做,我们也可以说从正确的相关性阅读 y小于x吗? FALSE
为什么在两种情况下输出都相同时使用左关联性?
如Mat所说,对于三元手术。
x>y>z
的答案实际上取决于方向,答案将从右到左,从左到右不等。但这是因为在不同阶段进行了不同的比较。
这两个答案都会评估一个值,但为什么我们说我们只会选择一个左关联的
答案 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)
答案 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
现在,关联性的概念只有在存在多个相同运算符的情况下才会到达。