什么是运营商的关联性,为什么重要?

什么是结合性(对于运营商而言),为什么它很重要?

更新:运算符关联性

对于操作员来说,相关性意味着当同一个操作员出现在一行中时,我们首先应用哪个操作员。 在下面,让Q为操作员

 a Q b Q c 

如果Q是关联的,则评估为

 (a Q b) Q c 

如果是正确的联想,则评估为

 a Q (b Q c) 

这很重要,因为它改变了expression的意思。 考虑整数运算的除法运算符,这是左结合的

 4 / 2 / 3 <=> (4 / 2) / 3 <=> 2 / 3 = 0 

如果它是正确的联合,它将评估为一个未定义的expression式,因为你会除以零

 4 / 2 / 3 <=> 4 / (2 / 3) <=> 4 / 0 = undefined 

有三种相关性:

math中的联想属性

编程语言的操作顺序

CPUcaching中的关联性

math中的联想属性是加法(+)等运算符的属性。 这个属性允许你重新排列括号而不改变语句的值,即:

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

在编程语言中,运算符的关联性(或固定性)是一个属性,决定了如何在没有括号的情况下将相同优先级的运算符分组; 即按照什么顺序评估每个操作员。 这可以在编程语言之间不同。

在CPU高速caching中,关联性是优化性能的一种方法。

如果您指的是“操作员关联性”,那么在没有括号的情况下,语言如何确定相同优先级的操作符是如何分组的。

例如,基于C的语言中的+和 – 运算符具有相同的优先级。 当你编写一个同时使用它们的expression式(没有括号)时,编译器必须确定按照什么顺序来评估它们。

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

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

根据您评估expression式的顺序,您可以得到不同的结果。 在基于C的语言中,+和 – 具有相关性,这意味着上面的expression式将作为第一种情况进行评估。

所有的语言都有明确的优先级和关联性规则。 您可以在这里了解更多有关C#规则的信息。 运算符关联性和优先级的一般概念在维基百科上得到了很好的覆盖。

对于相同优先级的运营商来说,这是评估的顺序。 左右或右边的命令是重要的。 对于

 3 - 2 - 1 

如果它是左到右,那就是

 (3 - 2) - 1 

并且是0.如果它是正确的,则是

 3 - (2 - 1) 

它是2.在大多数语言中,我们说负运算符具有左右关联性。

我假设你的意思是操作员的相关性…

这是操作数与操作符绑定的顺序。 基本上:

a – b + c

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

((a-b)+ c)或者,
(a – (b + c))

如果操作符保持关联(立即绑定到左操作数),则将被评估为第一个。 如果他们是正确的联合,它将被评估为第二。

简单!! 左联合意味着我们从左到右评估我们的表情。

正确联想意味着我们从右到左评估我们的表情。

我们知道*,/和%具有相同的优先级,但根据相关性可能会改变。

例如:我有exp:4 * 8/2%5

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

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

我希望这会有所帮助。 。 。

如果您的意思是操作员关联:

它定义了parsingexpression式的方式。 它提供了一个标准,所以每个expression式都以相同的方式parsing。

对于具有相同优先级的操作来说,这是非常重要的,因为可能会有副作用。

以前的大多数例子都使用了常量。 如果参数碰巧是函数调用,调用的顺序可能由关联规则决定,具体取决于您的编译器。 如果这些function有副作用

我们都知道优先是重要的,但在解释expression的意义上也是相关联的。 对于一个非常简单的介绍尝试运营商的力量 。