2008-09-10 20 views

答えて

13

論理演算の優先順序

  1. Not
  2. And
  3. Or
  4. Xor
  5. Eqv
  6. Imp

比較操作優先順序

  1. =
  2. <>
  3. <
  4. >
  5. <=
  6. >=
  7. LikeIs

算術演算の優先順序

  1. ^
  2. -(単項否定)
  3. */
  4. \
  5. Mod
  6. +-(2進加算/減算)
  7. &

出典:Sams Teach Yourself Visual Basic 6 in 24 Hours — Appendix A: Operator Precedence

+0

注文とは何ですか?最低から最高まで? –

+1

答えの提示は少し誤解を招く可能性があります。 3つのカテゴリ内の順序は最初から最後ですが、カテゴリ自体の順序は最後から1番目です。実際には、算術演算は論理演算の前に評価される比較演算の前に評価されます。より明確なプレゼンテーションのために、まず算術演算を行い、次に比較演算を行い、それに続いて論理演算を行うことで答えを提示することを提案します。ここでも参考になります:https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/operator-precedence –

9

それはあなたがデバッガにいるかどうかによって異なります。 本当に。まあ、一種です。

括弧が最初に来ます。次に、比較(>、<、=など)。その後、論理演算子。そのトリックは、の実行の順番が定義されていないということです。あなたは<演算子は、両方の論理との比較の前に実行されることが保証されている

If A < B And B < C Then 

:それは次の式を与えられたことを意味します。しかし、どの比較が最初に実行されるかは保証されていません。

IIRCでは、デバッガは左から右に実行されますが、コンパイルされたアプリケーションは右から左に実行されます。私はそれらを後方に持ち込むことができました(それは長い時間でした)が、重要なのはそれらが異なっているということです。したがって、実際の優先順位は変更されませんが、実行順序が変更される可能性があります。

+0

このようなステートメントでは、評価の正確な順序を指定する言語はほとんどありません。通常、コンパイラはそれがもっと効率的/速い/安全な/等と考えられる方法を行うために与えられた自由。どの言語でも実行順序に依存してコードを書くべきではありません! –

+0

そのような式の実行順序に依存するコードを書いたのなら、あなたは得意なものに値するでしょう! "あなたのコードを管理する人があなたがどこに住んでいるかを知っている暴力的なサイコパスです。" – MarkJ

+1

Joel、これは、左が真、そしてANDと偽が同じであれば、OR演算は右辺をスキップできないことを意味しますか? – Oskar

2

使用括弧


EDIT:それは新しいコードのために私からのアドバイスです!しかし、オスカーは他人のコードを読んでいるので、何とかそれを理解しなければならない。 VB6のマニュアルトピックオペレータの優先順位をお勧めします。残念ながら、このトピックはMSDN online VB6 manualには含まれていないようですので、ここで論理演算子情報を貼り付けます。 VB6ヘルプ(MSDNライブラリ)をインストールした場合は、あなたのマシンにそれを持っています。

論理演算子は以下の優先順位で評価されます。

Not 
And 
Or 
Xor 
Eqv 
Imp 

話題も比較や算術演算子の優先順位を説明します。

コードを編集しないとよい理由がない限り、括弧を入れておけば、優先順位がわかるようになると思います。

+2

他の人のコードを読む必要がなければ良い選択です... – Oskar

+0

おっと、私はあなたの痛みを感じます。私は私の答えにいくつか追加しました。オペレータの優先順位はVB6のヘルプ – MarkJ

+1

+1のアドバイスであり、それはまだ良いアドバイスです。副作用として、私は人々が最初に多くの演算子を1行のコードに詰め込もうとする理由を理解していません。時には、言語が*優先順位を定義して、人々が*達成しようとしていることを明確にするためにカッコを使用する*ようにしたいと思うことがあります。私はいつもLispがあると思う... –

関連する問題