运算符优先级
优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。
相同优先级中,按结合顺序计算。大多数运算是从左至右计算,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。
基本的优先级需要记住:
- 指针最优,单目运算优于双目运算。如正负号。
- 先乘除(模),后加减。
- 先算术运算,后移位运算,最后位运算。请特别注意:
1 << 3 + 2 & 7
等价于(1 << (3 + 2)) & 7
. - 逻辑运算最后计算。
优先级表
运算符 | 结合性 |
---|---|
[ ] . ( ) (方法调用) |
从左向右 |
! ~ ++ -- + (一元运算) -(一元运算) |
从右向左 |
* / % |
从左向右 |
+ - |
从左向右 |
<< >> >>> |
从左向右 |
< <= > >= instanceof |
从左向右 |
== != |
从左向右 |
& |
从左向右 |
^ |
从左向右 |
| |
从左向右 |
&& |
从左向右 |
|| |
从左向右 |
?: |
从右向左 |
= += -= *= /= %= &= |= ^= <<= >>= >>= |
从右向左 |
, |
从左到右 |
无符号右移运算符
>>>
,无符号右移的规则只记住一点:忽略了符号位扩展,0 补最高位。无符号右移规则和右移运算是一样的,只是填充时不管左边的数字是正是负都用 0 来填充,无符号右移运算只针对负数计算,因为对于正数来说这种运算没有意义。无符号右移运算符>>>
只是对 32 位和 64 位的值有意义