Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

EL 演算子優先順位

[] . 
() (演算子の優先順位を変更) 
- (単項) not ! empty 
* / div % mod 
+ - (2 項) 
< > <= >= lt gt le ge 
== != eq ne 
&& and 
|| or 
? : 

上記の優先順位の中でわからないことがあります。
+ - のところの「単項」とか「2項」っていったい何?

4

回答

3176

閲覧

4件の回答

評価

0

項をいくつ取るか、ってこと

評価

0

そういう場合は、「単項演算子とは」とか、検索しましょう。

評価

0

単項は、

-12 + 42

この場合の単項演算子は、-12 の "-" コレ。
2項演算子は、 -12 + 42 の "+" コレ。

100 - -10
の答えは、100 + 10 = 110 です。

構文解析風に答えると、
"100 - -10" という文字列を解析して数値の結果を算出します。

(0)文字列の先頭から字句解析(先読み)
(1)数値の文字列 "100" を発見。Integer.parseInt() で数値に変換して値を保存、次の字句先読み。
(2)"-" 記号発見。左辺値として 100 があるので、2項演算子と仮定して解析を継続する。次の字句を先読み。
(3)"-" を発見。直前の字句が 数値では無いので、単項演算子と仮定(直後に数値か変数が必ず来ると仮定)して先読み。
(4)"10" 数値文字列発見。Integer.parseInt() で数値に直し、更に、"-" の直後なので、符号反転する。
(5)(2)の後半部で、右辺値 -10 が得られたので、めでたく、2項演算子の "-" で "左辺 - 右辺"を演算。

結果、110 が残る。

こーゆー解析ロジックを、演算子の優先順位をからめて、2項演算子なのか、単項演算子なのかで場合わけ
して、構文解析を行っています。

Javaの演算子は多くが2項演算子、単項演算子は少ないですね。"+","-","!","~", あとなんだったかな・・・
2項演算子で変なのは、instanceof とか、
3項演算子 式 ? (true)式 : (false)式 なんて変り種
もあります。
 

評価

0

無名さん
mio さん
ありがとう。

特に「あ」さんありがとう。

「あ」さんの説明で99〜100%理解できました。
感謝です。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。