Visual Basic 中的運算子優先順序
當運算式中有數個作業同時進行時,會依稱為「運算子優先順序」的預定順序來評估和解析每個部分。
優先順序規則
當運算式包含來自多個類別的運算子時,會根據下列規則進行評估:
算術和串連運算子的優先順序如下一節所述,而且全部高於比較、邏輯和位元運算子。
所有比較運算子的優先順序會相等,而且全部高於邏輯和位運算子,但低於算術和串連運算子。
邏輯和位元運算子的優先順序如下一節所述,而且全部低於算術、串連和比較運算子。
優先順序相等的運算子會依出現在運算式中的順序,從左至右進行評估。
優先順序
運算子會依下列優先順序評估:
Await 運算子
Await
算術和串連運算子
乘冪 (^
)
一元識別和否定 (+
、–
)
乘法和浮點數除法 (*
、/
)
整數除法 (\
)
模組式算術 (Mod
)
加法和減法 (+
、–
)
字串串連 (&
)
算術移位 (<<
、>>
)
比較運算子
所有比較運算子 (=
、<>
、<
、<=
、>
、>=
、Is
、IsNot
、Like
、TypeOf
...Is
)
邏輯運算子和位元運算子
否定 (Not
)
結合 (And
, AndAlso
)
包含析取 (Or
、OrElse
)
互斥析取 (Xor
)
註解
=
運算子只是相等比較運算子,而不是指派運算子。
字串串連運算子 (&
) 不是算術運算子,但在優先順序方面與算術運算子同組。
Is
和 IsNot
運算子是物件參考比較運算子。 這兩個運算子不會比較兩個物件的值,只會檢查兩個物件變數是否參考相同的物件執行個體。
關聯性
當運算式中同時出現優先順序相等的運算子時 (例如乘法和除法),編譯器會從左至右評估每項遇到的作業。 說明如下例。
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.