6.3 运算符优先级与联合性

如果你考虑这样一个表达式:3+2*5,先计算*和先计算+所得到的结果是不同的.
为了消除表达式的这种歧义,运算符被分配了不同的优先级别.
这种情况下,*的优先级要高于+的优先级,所以将先计算*再计算+,所以3+2*5的结果是13.

如果两个运算符同级,则处理方式从左到右,除了单目运算符和赋值运算符,他们联合方式从右到左.
例如,*和/是同级的,所以5.0*5/6等于25.0/6等于4.166667.
另一方面,5/6*5.0等于0*5.0等于0.0.
与此相反,单目运算符从右到左计算,-!0也就是-(!0),也就是-1.

如果表达式的某个部分用使用了括号"()",则此部分将最先运算.
例如,表达式(3+2)*5,首先计算+,然后计算*,结果是25.
如果嵌套多个括号,则最里层的括号首先运算.

运算符优先级基本上和C一样.
完整的运算符优先级列表,从高到底,如下:

运算符 优先级
! ~ - (单目运算符) 最高级
** ?
* / % ?
+ - ?
> >= < <= ?
= != 区间运算符 ?
:= ?
& ?
^ ?
| ?
&& ?
^^ ?
|| 最低级

鼓励程序员使用括号使表达式在必要时保持清晰(可读性).
否则,由于运算符优先级细微的错误而产生的bug几乎很难被查明.