`

运算符优先级

    博客分类:
  • java
J# 
阅读更多

最近在研究表达式求值,看了下论坛推荐的JSEL和Aviator,感觉都挺不错, 我只要能做算术的基本运算以及一些比较、逻辑运算就好了, 它俩都已经能满足我对表达式求值的要求了。

运算符优先级刚好复习一下, 有些确实是记不得了。

优先级 运算符 结合性
1 () [] . 从左到右
2 ! +(正) -(负) ~ ++ -- 从右向左
3 * / % 从左向右
4 +(加) -(减) 从左向右
5 << >> >>> 从左向右
6 < <= > >= instanceof 从左向右
7 == != 从左向右
8 &(按位与) 从左向右
9 ^ 从左向右
10 | 从左向右
11 && 从左向右
12 || 从左向右
13 ?: 从右向左
14 = += -= *= /= %= &= |= ^= ~= <<= >>= >>>= 从右向左


说明:

移位运算符

“>>”右移;“<<”左移;“>>>”无符号右移

位逻辑运算符

“&”与;“|”或;“~”非;“^”异或

“&”与;“|”或;“~”非是基本逻辑运算,由此可以演变出“与非”、“或非”、“与或非”符合逻辑运算、“^”异或是一种特殊的逻辑运算,对它求反可以得到“同或”,所以“同或”逻辑也要“异或非”逻辑。

“&”两个运算数都为1时,结果为1,其余结果为0
“ | ”两个运算数都为0时,结果为0,其余结果为1
“ ^ “两个运算数相同时,结果为0,不同时结果为1
” ~ “0变成1,1变成0

布尔运算符:

&&:对运算数进行与运算,当所有的运算数都为true时,结果为true,否则为false;&&是短路与,意思是:当对运算数的表达式进行从左到右运算时,若遇到右运算数的值为false,则结束运算,将结果置为false

||:对运算数进行运算,当所有运算数都为false时,结果为false,否则结果为true;||是短路或,意思是:当对运算数的表达式进行从左到右的运算时,若遇到有运算数的值为ture,就结束运算,将结果置为true

!:对运算数的值进行取反运算,运算数为true,取反为false;

&:&运算符和&&一样,对运算数做与操作,不同的是它不是短路的,它会运算完所有的运算数表达式

|:|运算符和||一样,对运算数进行或操作,但它不是短路的

赋值运算符:=;+=;-=;*=;/=;&=;|=;^=;

i+=j ------ i=i+j

i-=j ------ i=i-j

i*=j ------ i=i*j

i/=j ------ i=i/j

i&=j ------ i=i&j

i|=j ------ i=i|j

i^=j ------ i=i^j

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics