演算子の優先順位について
Posted: 2016年8月08日(月) 14:01
よく見かける演算子の優先順位表の解釈についてです。
例えば次の3つです
後置の++、ーー
前置の++、ーー
比較の<など
表によると高いほうから順に、後置、前置、比較となっています。
例えば、次の場合 if文には演算子が3つあります。
表にしたがって優先順位の高いほうから計算していくと
1.b から1を引く ⇒ b の値は 6
2.a に1を加える ⇒ a の値は 6
3.a と b を比較する ⇒ (6 < 6) ⇒ 結果は偽となる
と私は解釈できると思いました。
この解釈が正しいとなると上の if文を含め次のものは全て同じ結果ということになります。
if(++a < --b)
if(a++ < b--)
if(a++ < --b)
しかし実際は違います。
私もそうなると思っているわけではありません。
何パターンかのテストもしました。
結果は(上の解釈と違うものも含め)すべて期待通りでした。
しかし、表だけを見ると上の解釈は間違ってないように思えます。
どう読み解いたらいいのでしょうか。
もうひとつ。
+とー 、また*と/、それから<と>や<=や>=は優先順位が同じとなっております。
「そりゃそうでしょう」とは思いますが、
後置が前置より上であったり、==と!=が上の<などより下である理由がわかりません。
そうしないと困ることがあるのでしょうか。
以上を具体的な例を挙げて説明してもらえると助かります。
例えば次の3つです
後置の++、ーー
前置の++、ーー
比較の<など
表によると高いほうから順に、後置、前置、比較となっています。
例えば、次の場合 if文には演算子が3つあります。
表にしたがって優先順位の高いほうから計算していくと
1.b から1を引く ⇒ b の値は 6
2.a に1を加える ⇒ a の値は 6
3.a と b を比較する ⇒ (6 < 6) ⇒ 結果は偽となる
と私は解釈できると思いました。
この解釈が正しいとなると上の if文を含め次のものは全て同じ結果ということになります。
if(++a < --b)
if(a++ < b--)
if(a++ < --b)
しかし実際は違います。
私もそうなると思っているわけではありません。
何パターンかのテストもしました。
結果は(上の解釈と違うものも含め)すべて期待通りでした。
しかし、表だけを見ると上の解釈は間違ってないように思えます。
どう読み解いたらいいのでしょうか。
もうひとつ。
+とー 、また*と/、それから<と>や<=や>=は優先順位が同じとなっております。
「そりゃそうでしょう」とは思いますが、
後置が前置より上であったり、==と!=が上の<などより下である理由がわかりません。
そうしないと困ることがあるのでしょうか。
以上を具体的な例を挙げて説明してもらえると助かります。