Visual Basic 中的运算符优先级

在表达式中发生多个作时,将按预先确定的顺序计算并解析每个部分,称为 运算符优先级

优先规则

当表达式包含来自多个类别的运算符时,会根据以下规则计算这些运算符:

  • 算术和串联运算符具有下一节中所述的优先级顺序,并且都比比较运算符、逻辑运算符和按位运算符具有更高的优先级。

  • 所有比较运算符都具有相等的优先级,并且其优先级都高于逻辑运算符和按位运算符,但优先级低于算术和串联运算符。

  • 逻辑运算符和按位运算符具有下一节中所述的优先级顺序,并且其优先级都低于算术、串联和比较运算符。

  • 优先级相等的运算符按表达式中显示的顺序从左到右计算。

优先级顺序

运算符按以下优先级顺序计算:

Await 运算符

等待

算术和串联运算符

指数 (^

一元身份和否定 (+

乘法和浮点除法 (*/

整数除法 (\

模块化算术 (Mod

加法和减法 (+

字符串串联 (&

算术位移位 (<<>>

比较运算符

所有比较运算符(=、、<>=IsNotIsLike<=><>...) TypeOfIs

逻辑运算符和按位运算符

否定 (Not

连词 (AndAndAlso

非独占解禁 (OrOrElse

独家解禁 (Xor

注释

运算符 = 只是相等比较运算符,而不是赋值运算符。

字符串串联运算符 (&) 不是算术运算符,但优先使用算术运算符分组。

运算符IsIsNot是对象引用比较运算符。 它们不比较两个对象的值;它们仅检查以确定两个对象变量是否引用同一对象实例。

结合性

当优先级相等的运算符出现在表达式中(例如乘法和除法)中时,编译器会计算每个作,因为它从左到右遇到它。 下面的示例对此进行了演示。

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有三个结果。 相比之下, 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.

另请参阅