什么是关联性(对于运算符)以及为什么它很重要?

更新: 运算符结合性

有帮助吗?

解决方案

有关的运营商,关联意味着当同一操作者在一行中出现,那么我们首先应用哪个运营商occurence。在下文中,让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

其他提示

有三种关联性:

在数学缔合性能

在编程语言操作顺序

关联性在CPU的高速缓存。

在数学缔合性能是运营商如加成的性质(+)。此属性允许你重新排列括号不改变说法,即值:

(a + b) + c = a + (b + c)

在编程语言中,操作者的关联性(或固定性)是确定如何相同的优先级的运营商在没有括号的被分组的属性;即,在什么样的顺序每个操作员进行评价。这可以编程语言之间是不同的。

在CPU高速缓存,关联性是优化性能的方法。

它是评估相同的优先级的运算符的顺序。从左到右或从右到左的顺序问题。对于

3 - 2 - 1

如果它为从左到右,则它是

(3 - 2) - 1

和是0。如果它是从右到左,那么它是

3 - (2 - 1)

和它为2。在大多数语言中,我们说,减去运营商有一个从左到右的关联性。

如果您指的是“运算符结合性” - 它是一种语言如何确定在没有括号的情况下如何对相同优先级的运算符进行分组。

例如,基于 C 的语言中的 + 和 - 运算符具有相同的优先级。当您编写同时使用它们(不带括号)的表达式时,编译器必须确定对它们求值的顺序。

如果写 12 - 5 + 3,可能的评估包括:

  1. (12 - 5) + 3 = 10
  2. 12 - (5 + 3) = 4

根据计算表达式的顺序,您可以获得不同的结果。在基于 C 的语言中,+ 和 - 具有左结合性,这意味着上面的表达式将作为第一种情况进行计算。

所有语言都有严格定义的优先级和结合性规则。您可以详细了解以下规则 C# 这里。运算符的一般概念 关联性优先级 维基百科上有很好的介绍。

<强>简单!!

<强>左结合表示从我们评价我们的表达从左到右

右键关联表示我们评估从右我们表达至左

我们知道*,/和%具有相同的优先级,但是按照关联,答案可能会改变:

有关例如:我们有表达:4 * 8/2%5

<强>左结合:(4 * 8)/ 2%5 ==>(32/2)%5 ==> 16%5 ==> 1

从右缔: 4×8 /(2%5)==> 4 *(8/0)==>未定义的行为

我希望这会有所帮助。

我假定你的意思是运营商关联...

这是对操作者的操作数的结合的顺序。基本上是:

A - B + C

可能被评价为(假设 - 和+具有相同的优先级):

((A - B)+ C),或者,结果 (一 - (B + C))

如果运营商正在左结合(立即结合到左操作数),它会被作为第一评价。如果他们是右结合,它会被评价为第二

如果你的意思是运营商关联:

它定义表达式被解析的方式。它给出了一个标准,所以每一个表达式被解析的方式相同。

这对于具有相同precedense操作大多是重要的,当可能有副作用。

大多数前述实施例已经使用的常数。如果参数恰好是函数调用,这是由在呼叫可以通过关联规则,来确定你的编译器根据课程的顺序。如果这些功能有副作用..

我们都知道,优先是重要的,但这样的关联性解释表达的意思。对于一个真正简单的介绍尝试操作符的电源。

scroll top