3.2 运算符优先级和结合性
运算符优先级决定了表达式中运算符的计算顺序。同一个表达式中,优先级高的运算符比优先级低的先计算。
下表按照运算符优先级顺序从高到低列出了所有的表达式运算符,其来自附录B中的Modelica语法。所有的运算符都是二元运算符,除后缀运算符和那些与表达式expr一起作为一元运算符的运算符,条件运算符,数组构造运算符{},连接运算符[],二元或者三元数组范围构造外。表中同一行上的运算符其优先级相同:
表 3-1 运算符
运算符分组 | 运算符语法 | 示例 |
---|---|---|
后缀数组索引运算符 | [] | arr[index] |
后缀访问运算符 | . | a.b |
后缀函数调用 | funcName(function-rguments) | Sin(4.36) |
数组构造/合并 | {expressions} [expressions][expressions; expressions...] | {2,3} [5,6][2,3; 7,8] |
乘方 | ^ | 2^3 |
乘法和数组点乘 | * / .* ./ | 2*3 2/3[1,2;3,4].*[2,3;5,6] |
加法和数组点加 | + - +expr -expr.+ .- | a+b, a-b,+a,-a [1,2;3,4].+[2,3;5,6] |
关系运算符 | <<=>>= ==<> | a<b, a<=b, a>b,... |
一元否定 | not expr | not b1 |
逻辑与 | And | b1 and b2 |
逻辑或 | or | b1 or b2 |
数组范围 | expr : exprexpr : expr : expr | 1:5start:step:stop |
条件运算符 | if expr then expr else expr | if b then 3 else x |
命名参数 | ident=expr | x = 2.26 |
条件运算符也可以包括elseif子句。相等“=”和赋值“:=”不是表达式运算符,因为它们只允许单独出现在方程和赋值语句中。所有二元运算符是左结合的,除乘方运算符外(它是非结合的)。数组范围运算符是非结合的。
【Modelica中一元减法和加法运算符与Mathematica和MATLAB1有细微差别,下列表达式是非法的(然而在Mathemmatica2和MATLAB中它们是合法的表达式):
2*-2 // = -4 在Mathematica/MATLAB中;在Modelica中是非法的
--2 // = 2在Mathematica/MATLAB中;在Modelica中是非法的
++2 // = 2在Mathematica/MATLAB中;在Modelica中是非法的
2--2 // = 4在Mathematica/MATLAB中;在Modelica中是非法的
非结合的乘方和数组范围运算符
x^y^z // 非法的,需用圆括号将其表达清楚。
a:b:c:d:e:f:g // 非法的,向量参数没有给出合法的解释。
】
1. MATLAB是是Mathworks注册商标。 ↩
2. Mathematica是Wolfram Research公司注册商标。 ↩