运算符优先级背后的逻辑

时间:2017-04-04 10:21:15

标签: c operators operator-precedence

编译器在运算符之间遵循特定优先级的动机是什么。为什么它不是仅按编写代码的顺序设计的。我的意思是,为什么"a + b * c"被视为"(b * c) + a"?为什么不按照相同的顺序编写呢?每当我尝试学习编程语言时,我都很难记住优先级/优先级。有没有一种简单的方法来掌握它?

3 个答案:

答案 0 :(得分:1)

编写解析器/编译器实际上更容易,而不必处理运算符优先级。在这种情况下,算术将简单地从左到右执行。

实施例: 10 + 20 * 30 => (10 + 20)* 30 => 30 * 30 => 900

那么,为什么要处理运算符优先级呢? 它来自数学(算术),只是人们选择遵循的一种实践。它不应该是一个麻烦,因为所有语言都具有大致相同的运算符优先级,您不需要学习每种语言的运算符处理。更好的是,括号或paranthesis具有最高优先级,因此如果您不确定,可以使用它们。

您可能想要了解为什么首先创建BODMAS规则。

答案 1 :(得分:0)

这与普通的数学规则相似。您有功能和操作的优先级。 如果您想更改优先级,则必须使用括号或不同的操作数顺序。

答案 2 :(得分:0)

C中的运算符预测与基本算术order of operations非常匹配。但你是对的,还有其他一套规则。

编程课程中很多人学习的另一种选择是reverse-polish notation。实际上,70年代的工程学院过去常常在常规数学课上教授反向修饰符号,因为它是HP计算器用来运作的方式。它是一种更简单的计算机处理方法,与处理器使用堆栈处理数据的方式非常相似。