Visual Basic における演算子の優先順位

式で複数の演算が行われると、各部分は "演算子の優先順位" と呼ばれる事前に定義された順序で評価および解決されます。

優先順位の規則

式に複数のカテゴリの演算子が含まれている場合は、次の規則に従って評価されます。

  • 算術演算子と連結演算子には、次のセクションで説明する優先順位があり、これらはすべて比較演算子、論理演算子、ビット演算子よりも優先順位が高くなります。

  • すべての比較演算子は同じ優先順位を持ち、論理演算子とビット演算子より優先順位が高くなりますが、算術演算子と連結演算子より優先順位が低くなります。

  • 論理演算子とビット演算子には、次のセクションで説明する優先順位があり、これらはすべて算術演算子、連結演算子、比較演算子よりも優先順位が低くなります。

  • 優先順位が同じ演算子は、式に出現する順序で左から右に評価されます。

優先順位

演算子は次の優先順位で評価されます。

Await 演算子

Await

算術演算子と連結演算子

累乗 (^)

単項恒等と否定 (+)

乗算および浮動小数点除算 (*/)

整数の除算 (\)

モジュラー演算 (Mod)

加算と減算 (+)

文字列連結 (&)

算術ビット シフト (<<>>)

比較演算子

すべての比較演算子 (=<><<=>>=IsIsNotLikeTypeOf...Is)

論理演算子とビット処理演算子

否定 (Not)

接続詞 (AndAndAlso)

包含的論理和 (OrOrElse)

排他的論理和 (Xor)

コメント

= 演算子は単に等値比較演算子であり、代入演算子ではありません。

文字列連結演算子 (&) は算術演算子ではありませんが、優先順位においては算術演算子と同じグループに分類されます。

IsIsNot の演算子は、オブジェクト参照比較演算子です。 これらは 2つのオブジェクトの値を比較しません。2 つのオブジェクト変数が同じオブジェクト インスタンスを参照するかどうかを確認するだけです。

結合規則

同じ優先順位の演算子が乗算や除算などの式に一緒に現れる場合、コンパイラは各演算の出現時にそれを左から右に評価します。 次の例を使って説明します。

Dim n1 As Integer = 96 / 8 / 4
Dim n2 As Integer = (96 / 8) / 4
Dim n3 As Integer = 96 / (8 / 4)

最初の式では、除算 96/8 (結果は 12) が評価され、次に除算 12/4 (結果は 3) が評価されます。 コンパイラでは n1 の演算が左から右に評価されるため、その順序が n2 に明示的に指定されている場合、評価は同じになります。 n1n2 の両方の結果が 3 になります。 これに対して、n3 の結果は 48 になります。これは、かっこによりコンパイラで 8/4 が最初に評価されるためです。

この動作のため、演算子は Visual Basic 内で "結合規則が左から右" であると言われます。

優先順位と結合規則のオーバーライド

かっこを使用して、式のいくつかの部分を他の部分より前に強制的に評価できます。 これにより、優先順位と左から右の結合規則の両方をオーバーライドできます。 Visual Basic では常に、かっこで囲まれた演算がその外側にある演算より前に実行されます。 ただし、かっこで内では、通常の優先順位と結合規則が維持されます (かっこ内でかっこを使用する場合は除く)。 次の例を使って説明します。

Dim a, b, c, d, e, f, g As Double
a = 8.0
b = 3.0
c = 4.0
d = 2.0
e = 1.0
f = a - b + c / d * e
' The preceding line sets f to 7.0. Because of natural operator
' precedence and associativity, it is exactly equivalent to the
' following line.
f = (a - b) + ((c / d) * e)
' The following line overrides the natural operator precedence
' and left associativity.
g = (a - (b + c)) / (d * e)
' The preceding line sets g to 0.5.

関連項目