式で複数の操作が発生すると、各部分が評価され、 演算子の優先順位と呼ばれる所定の順序で解決されます。
優先順位規則
式に複数のカテゴリの演算子が含まれている場合は、次の規則に従って評価されます。
算術演算子と連結演算子は、次のセクションで説明する優先順位を持ち、すべて比較演算子、論理演算子、ビット演算子よりも優先順位が高くなります。
すべての比較演算子は同じ優先順位を持ち、すべて論理演算子とビット演算子よりも優先順位が高くなりますが、算術演算子と連結演算子よりも優先順位が低くなります。
論理演算子とビット演算子は、次のセクションで説明する優先順位を持ち、すべて算術演算子、連結演算子、および比較演算子よりも優先順位が低くなります。
優先順位が等しい演算子は、式に表示される順序で左から右に評価されます。
優先順位
演算子は、次の優先順位で評価されます。
Await 演算子
待つ
算術演算子と連結演算子
指数 (^
)
単項 ID と否定 (+
、 –
)
乗算と浮動小数点除算 (*
、 /
)
整数除算 (\
)
モジュラー算術 (Mod
)
加算と減算 (+
、 –
)
文字列連結 (&
)
算術ビット シフト (<<
、 >>
)
比較演算子
すべての比較演算子 (=
、 <>
、 <
、 <=
、 >
、 >=
、 Is
、 IsNot
、 Like
、 TypeOf
...Is
)
論理演算子とビット演算子
否定 (Not
)
結合 (And
、 AndAlso
)
包括結合 (Or
、 OrElse
)
排他的結合 (Xor
)
コメント
=
演算子は等値比較演算子のみで、代入演算子ではありません。
文字列連結演算子 (&
) は算術演算子ではありませんが、優先順位は算術演算子でグループ化されます。
Is
演算子とIsNot
演算子は、オブジェクト参照比較演算子です。 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
に対して明示的に示されている場合、評価は同じです。
n1
とn2
の両方に 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.
こちらも参照ください
.NET