共用方式為


Visual Basic 中的運算子優先順序

更新:2007 年 11 月

當運算式中出現數個運算時,會以稱為「運算子優先順序」的預先決定順序來評估及解析每個運算部分。

優先順序規則

當運算式含有來自於一個以上分類的運算子時,則會按照下列規則進行評估。

  • 算術和串連運算子優先順序如下節所述,其優先順序都高於比較運算子、邏輯運算子和位元運算子。

  • 所有比較運算子的優先順序都相同,且都高於邏輯和位元運算子,但低於算術和串連運算子。

  • 邏輯和位元運算子優先順序如下節所述,其優先順序都低於算術運算子、串連運算子和比較運算子。

  • 優先順序相同的運算子,是按照其在運算式中的位置由左至右評估。

優先順序

運算子會按照下列優先順序進行評估:

算術和串連運算子

乘冪 (^)

一元識別和反轉正負號 (+、–)

乘法和浮點數除法 (*、/)

整數相除 (\)

模數算術 (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 中的運算子就稱為「左關聯」(Left Associative)。

覆寫優先順序和關聯性

您可以使用括號,強制優先評估運算式的某部分。這能覆寫優先順序和左順序關聯性兩者。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.

請參閱

概念

Visual Basic 中的運算子和運算式

參考

= 運算子 (Visual Basic)

Is 運算子 (Visual Basic)

IsNot 運算子

Like 運算子 (Visual Basic)

TypeOf 運算子 (Visual Basic)

運算子 (依功能排列)