前面介绍了算术运算符、比较运算符、逻辑运算符等各种运算符,如果一个表达式中有多种运算符,那么先算哪个后算哪个就要遵循一定的规则。这个规则就是先算优先级高的,再算优先级低的,如果各运算符优先级相同,按照从左到右的顺序计算。比如四则运算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。