【发布时间】:2010-09-09 09:41:03
【问题描述】:
这种混淆的产生是因为大多数人都接受过根据 PEDMAS or BODMAS rule 计算算术表达式的培训,而 C# 等编程语言中的算术表达式却不能以相同的方式工作。
您对此有何看法?
【问题讨论】:
这种混淆的产生是因为大多数人都接受过根据 PEDMAS or BODMAS rule 计算算术表达式的培训,而 C# 等编程语言中的算术表达式却不能以相同的方式工作。
您对此有何看法?
【问题讨论】:
我不确定是否真的有区别。传统的 BODMAS(括号、命令、除法、乘法、加法、减法)或 PEDMAS(括号、指数、除法、乘法、加法、减法)只是所有可能操作的子集,并表示这些操作应该应用的顺序. 我不知道有什么语言违反了 BODMAS/PEDMAS 规则,但每种语言通常都会添加各种其他运算符 - 例如 ++、--、= 等。
我总是将运算符优先级列表放在手边,以防出现混淆。然而,当有疑问时,通常值得使用一些括号来明确含义。请注意,括号没有最高优先级 - 请参阅 http://msdn.microsoft.com/en-us/library/126fe14k.aspx 以获取 C++ 中的示例。
【讨论】:
优先级和关联性都指定应如何以及以何种顺序将术语拆分为子术语。换句话说,如果没有明确指定,它是否指定了隐式设置括号的规则。
如果您有一个没有括号的术语,则从优先级最低的运算符开始并将其括在括号中。
例如:
优先级:
术语:
!person.isMarried && person.age == 25 + 2 * 5
会这样分组:
一个非常常见的规则是 * 和 / 在 + 和 - 之前的优先级。
关联性指定具有相同优先级的运算符在哪个方向上分组。大多数运算符是从左到右的。一元前缀运算符是从右到左的。
例子:
1 + 2 + 3 + 4
这样分组:
同时
!!+1
被分组为
到目前为止,一切都符合 BODMAS/PEDMAS 规则,您经历过哪些差异?
【讨论】:
Precedence 规则指定运算符的优先级(首先评估哪些运算符,例如乘法的优先级高于加法,PEMDAS)。
关联性 规则说明了相同优先级的运算符是如何分组的。算术运算符是左结合的,但赋值是右结合的(例如,a = b = c 将被计算为 b = c,a = b)。
order 是应用 precedence 和 associativity 规则的结果,并告诉如何计算表达式 - 将计算哪些运算符冷杉,后来,最后。可以使用 braces 更改实际顺序(大括号也是具有最高优先级的运算符)。
编程语言中运算符的优先级和关联性可以在其语言手册或规范中找到。
【讨论】: