运算符的优先级

前面介绍了算术运算符、比较运算符、逻辑运算符等各种运算符,如果一个表达式中有多种运算符,那么先算哪个后算哪个就要遵循一定的规则。这个规则就是先算优先级高的,再算优先级低的,如果各运算符优先级相同,按照从左到右的顺序计算。比如四则运算1+2*3-4/2,将加减法和乘除法放在一起作计算,因为乘除法的优先级比加减法的高,所以要先算乘除法,后算加减法。这是我们很熟悉的。[大谦MATLAB,dqmatlab点com]

【MATLAB】

表3-9列出了MATLAB中各种主要的运算符以及它们在表达式中的计算优先级。

表3-9 MATLAB运算符的优先级

运算符 运算符说明 优先级
(),[],{} 小括号 12
.’,.^,’,^ 转置、幂、复数共轭转置、矩阵的幂 11
~ 逻辑否 10
+(正号), -(负号) 正负号 9
.*,./,.\,*, /,\ 点乘、右除、左除、矩阵乘、矩阵右除、矩阵左除 8
+, - 加减 7
: 冒号 6
==, !=, >, >=, <, <= 比较运算 5
& 逐元素与 4
| 逐元素或 3
&& 逻辑与 2
|| 逻辑或 1

【Python】

表3-10列出了Python中各种主要的运算符以及它们在表达式中的计算优先级。

表3-10 Python运算符的优先级

运算符 运算符说明 优先级
( ) 小括号 18
x[i] 索引运算 17
x.attribute 属性和方法访问 16
** 指数运算 15
~ 按位取反 14
+(正号), -(负号) 正负号 13
*, /, //, % 乘除 12
+, - 加减 11
>>, << 移位 10
& 按位与 9
^ 按位异或 8
| 按位或 7
==, !=, >, >=, <, <= 比较运算 6
is, is not 身份运算 5
in, not in 成员运算 4
not 逻辑非 3
and 逻辑与 2
or 逻辑或 1

下面举几个例子说明运算符优先级的应用。

对于下面四则运算的算术运算表达式,先算乘除法,后算加减法。

【MATLAB】

code.matlab
>> 1+2*3-4/2
ans =
  double
5

【Python】

code.python
>>> 1+2*3-4/2
5.0

因为除法运算返回的结果是浮点型的,最后得到的结果也是浮点型的。下面如果希望先算1+2,将它们的和再乘以3,可以用小括号改变加法运算的优先级。如果小括号有嵌套,先算里面的。

【MATLAB】

code.matlab
>> ((1+2)*3-4)/2
ans =
  double
  2.5

【Python】

code.python
>>> ((1+2)*3-4)/2
2.5

下面的表达式中有关系运算和逻辑运算,先算关系运算,再算逻辑运算。

【MATLAB】

code.matlab
>> 3>2 && 7<5
ans =
  logical
   0

【Python】

code.python
>>> 3>2 and 7<5
False

表达式中,关系表达式3>2返回True,关系表达式7<5返回False,最后算逻辑表达式True and False,返回False。