代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

什么是运算符的关联性?为什么它很重要?

  •  75
  • nonopolarity  · 技术社区  · 15 年前

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

    更新: 运算符结合性

    9 回复  |  直到 6 年前
        1
  •  84
  •   Johannes Schaub - litb    8 年前

    对于操作符,关联性意味着当同一个操作符出现在一行中时,我们首先应用哪个操作符。在下面,让 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
    
        2
  •  11
  •   Robert Harvey    15 年前

    有三种关联性:

    The Associative property in mathematics

    Order of Operations in programming languages

    Associativity in CPU caches.

    数学中的结合性是加法等算符的一个性质。此属性允许您在不更改语句值的情况下重新排列括号,即:

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

    在编程语言中,运算符的关联性(或固定性)是一个属性,它决定相同优先级的运算符在 缺席 括号;即每个运算符的计算顺序。这在编程语言之间可能有所不同。

    在CPU缓存中,关联性是一种优化性能的方法。

        3
  •  5
  •   nonopolarity    15 年前

    它是对具有相同优先级的运算符的评估顺序。从左到右或从右到左的顺序很重要。为了

    3 - 2 - 1
    

    如果是从左到右,那就是

    (3 - 2) - 1
    

    是0。如果是从右向左,那就是

    3 - (2 - 1)
    

    它是2。在大多数语言中,我们说减号运算符具有从左到右的关联性。

        4
  •  5
  •   LBushkin    15 年前

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

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

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

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

    根据计算表达式的顺序,可以得到不同的结果。在基于C的语言中,+和-留下了关联性,这意味着上面的表达式将作为第一种情况进行计算。

    所有语言都有严格定义的优先级和关联性规则。您可以进一步了解 C# 在这里。算符的一般概念 associativity precedence 在维基百科上有很好的报道。

        5
  •  3
  •   Deepak    6 年前

    简单!!

    左关联 意味着我们从左到右评估表达式

    向结合 意味着我们从右到左评估表达式

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

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

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

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

    我希望这会有所帮助。

        6
  •  2
  •   Mehrdad Afshari    15 年前

    我想你是说算符的关联性…

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

    A+B+C

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

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

    如果运算符是左关联的(立即绑定到左操作数),它将被计算为第一个。如果它们是右相关的,则将被评估为第二个。

        7
  •  1
  •   Ikke    15 年前

    如果您的意思是运算符关联性:

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

    对于具有相同先例的手术来说,当出现副作用时,这一点非常重要。

        8
  •  0
  •   JustJeff    15 年前

    前面的大多数例子都使用常量。如果参数恰好是函数调用,则调用的顺序可能由关联规则决定,这当然取决于编译器。如果这些功能有副作用……

        9
  •  0
  •   user138512    14 年前

    我们都知道优先级很重要,但在解释表达式的意义时,关联性也很重要。简单介绍一下 Power of Operators .

    推荐文章