什么是关联性(针对运营商)以及为什么重要?
已更新:运营商关联
答案 0 :(得分:85)
对于运算符,关联性意味着当同一个运算符出现在一行中时,我们首先应用哪个运算符出现。在下文中,让Q
成为运算符
a Q b Q c
如果Q
保持关联,则评估为
(a Q b) Q c
如果它是正确的关联,那么它的评估为
a Q (b Q c)
这很重要,因为它改变了表达的含义。考虑具有整数运算的除法运算符,它是左关联的
4 / 2 / 3 <=> (4 / 2) / 3 <=> 2 / 3 = 0
如果它是右关联的,它将评估为未定义的表达式,因为你将除以零
4 / 2 / 3 <=> 4 / (2 / 3) <=> 4 / 0 = undefined
答案 1 :(得分:11)
有三种相关性:
The Associative property in mathematics
Order of Operations in programming languages
数学中的关联属性是运算符的属性,例如加法(+)。此属性允许您重新排列括号而不更改语句的值,即:
(a + b) + c = a + (b + c)
在编程语言中,运算符的关联性(或固定性)是一个属性,用于确定相同优先级的运算符如何在括号的缺席中进行分组;即每个操作员的评估顺序。编程语言可能有所不同。
在CPU缓存中,关联性是一种优化性能的方法。
答案 2 :(得分:5)
它是相同优先级的运算符的求值顺序。左下或右下订单事宜。对于
3 - 2 - 1
如果它是LEFT到RIGHT,则它是
(3 - 2) - 1
并且为0.如果它是LEIGHT,那么它是
3 - (2 - 1)
它是2.在大多数语言中,我们说减号运算符具有左向右相关性。
答案 3 :(得分:5)
如果您指的是“运算符关联性” - 它是一种语言如何确定在没有括号的情况下如何对相同优先级的运算符进行分组。
例如,基于C语言的+和 - 运算符具有相同的优先级。当您编写一个使用它们的表达式(没有括号)时,编译器必须确定评估它们的顺序。
如果你写12 - 5 + 3,可能的评估包括:
根据您评估表达式的顺序,您可以获得不同的结果。在基于C语言中,+和 - 具有左关联性,这意味着上面的表达式将作为第一种情况进行评估。
所有语言都有强烈定义的优先级和关联性规则。您可以在此处详细了解C#的规则。运算符associativity和precedence的一般概念在维基百科上有很好的涵盖。
答案 4 :(得分:3)
<强>简单!! 强>
左关联表示我们从左到右评估表达式
右关联表示我们从右到左评估表达式
我们知道*,/和%具有相同的优先级,但根据关联性,答案可能会改变:
例如:我们有表达式:4 * 8/2%5
左关联:(4 * 8)/ 2%5 ==&gt; (32/2)%5 ==&gt; 16%5 ==&gt; 1
右关联: 4 * 8 /(2%5)==&gt; 4 *(8/0)==&gt;未定义的行为
我希望这会有所帮助。
答案 5 :(得分:2)
我认为你的意思是操作员关联......
这是将操作数绑定到运算符的顺序。基本上是:
a - b + c
可能被评估为(假设 - 和+具有相同的优先级):
((a-b)+ c)或,
(a - (b + c))
如果运算符是左关联的(立即绑定到左操作数),它将被评估为第一个。如果它们是正确关联的,那么它将被评估为第二个。
答案 6 :(得分:1)
如果您的意思是操作员关联性:
它定义了表达式的解析方式。它给出了一个标准,所以每个表达式都以相同的方式解析。
对于具有相同优先级的操作,当可能存在副作用时,这一点非常重要。
答案 7 :(得分:0)
前面的大多数示例都使用了常量。如果参数恰好是函数调用,则调用的顺序可能由关联规则决定,当然这取决于您的编译器。如果这些功能有副作用..
答案 8 :(得分:0)
我们都知道优先权很重要,但解释表达意义的相关性也很重要。对于一个非常简单的介绍尝试Power of Operators。
答案 9 :(得分:0)
在编程语言概念中,关联性属于计算顺序。计算顺序决定了表达式的含义。它有两个主要规则,
- 优先规则
- 关联规则
优先级规则定义了评估不同类型的“相邻”运算符的顺序。每种编程语言都有关于其运算符的运算符优先级表。
回到关联性
它定义具有相同优先级的相邻操作的执行顺序。 它有3种口味,
左联想性
右关联性
非关联性
如果运算符是左关联的,则从左到右求值;如果运算符是右关联的,则从右到左求值。