这种混乱的出现是因为大多数人都接受过根据PEDMAS or BODMAS rule评估算术表达式的训练,而像C#这样的编程语言中的算术表达式不能以相同的方式工作。
你对此有何看法?
答案 0 :(得分:8)
优先级规则指定运算符的优先级(首先评估哪些运算符,例如乘法优先于加法,PEMDAS)。
associativity 规则说明了如何对具有相同优先级的运算符进行分组。算术运算符是左关联的,但赋值是右关联的(例如,a = b = c将被计算为b = c,a = b)。
订单是应用优先级和关联性规则的结果,并说明如何评估表达式 - 将评估哪些运算符冷杉,后来,最后。可以使用大括号更改实际顺序(大括号也是具有最高优先级的运算符)。
编程语言中运算符的优先级和关联性可以在其语言手册或规范中找到。
答案 1 :(得分:2)
我不确定确实存在差异。传统的BODMAS(括号,顺序,除法,乘法,加法,减法)或PEDMAS(括号,指数,除法,乘法,加法,减法)只是所有可能操作的子集,并表示应该应用此类操作的顺序。我不知道任何违反BODMAS / PEDMAS规则的语言,但每种语言通常会添加其他各种操作符 - 例如++, - ,=等。
在出现混淆的情况下,我始终保持一个操作符优先级列表。然而,如果有疑问,通常值得使用一些括号来明确含义。请注意,括号没有最高优先级 - 请参阅http://msdn.microsoft.com/en-us/library/126fe14k.aspx以获取C ++中的示例。
答案 2 :(得分:2)
优先级和关联性都指定了术语应该如何以及以何种顺序分成子项。换句话说,如果没有明确指定,它会指定隐式设置括号的规则。
如果您的术语没有括号,则从优先级最低的运算符开始,并将其括在括号中。
例如:
Precendences:
术语:
!person.isMarried && person.age == 25 + 2 * 5
将按以下方式分组:
一个非常常见的规则是*和/之前+和 - 。
的优先级关联性指定对相同优先级的运算符进行分组的方向。大多数运营商都是从左到右。一元前缀运算符是从右到左。
示例:
1 + 2 + 3 + 4
的分组如下:
,而
!! + 1
分组为
到目前为止,一切都符合BODMAS / PEDMAS规则,您遇到的差异是什么?