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公司注册商标。

results matching ""

    No results matching ""