VB.Net - 运算符



运算符是一个符号,它告诉编译器执行特定的数学或逻辑操作。VB.Net 拥有丰富的内置运算符,并提供以下类型的常用运算符:

  • 算术运算符

  • 比较运算符

  • 逻辑/位运算符

  • 位移运算符

  • 赋值运算符

  • 其他运算符

本教程将解释最常用的运算符。

算术运算符

下表显示了 VB.Net 支持的所有算术运算符。假设变量A的值为 2,变量B的值为 7,则:

显示示例

运算符 描述 示例
^ 将一个操作数提升到另一个操作数的幂 B^A 将得到 49
+ 将两个操作数相加 A + B 将得到 9
- 从第一个操作数中减去第二个操作数 A - B 将得到 -5
* 将两个操作数相乘 A * B 将得到 14
/ 将一个操作数除以另一个操作数并返回浮点结果 B / A 将得到 3.5
\ 将一个操作数除以另一个操作数并返回整数结果 B \ A 将得到 3
MOD 模运算符,返回整数除法后的余数 B MOD A 将得到 1

比较运算符

下表显示了 VB.Net 支持的所有比较运算符。假设变量A的值为 10,变量B的值为 20,则:

显示示例

运算符 描述 示例
= 检查两个操作数的值是否相等;如果相等,则条件为真。 (A = B) 为假。
<> 检查两个操作数的值是否不相等;如果不相等,则条件为真。 (A <> B) 为真。
> 检查左操作数的值是否大于右操作数的值;如果大于,则条件为真。 (A > B) 为假。
< 检查左操作数的值是否小于右操作数的值;如果小于,则条件为真。 (A < B) 为真。
>= 检查左操作数的值是否大于或等于右操作数的值;如果大于或等于,则条件为真。 (A >= B) 为假。
<= 检查左操作数的值是否小于或等于右操作数的值;如果小于或等于,则条件为真。 (A <= B) 为真。

除此之外,VB.Net 还提供三个比较运算符,我们将在后面的章节中使用;但是,这里简要介绍一下。

  • Is 运算符 - 它比较两个对象引用变量,并确定两个对象引用是否指向同一个对象,而无需进行值比较。如果 object1 和 object2 都引用完全相同的对象实例,则结果为True;否则,结果为 False。

  • IsNot 运算符 - 它也比较两个对象引用变量,并确定两个对象引用是否指向不同的对象。如果 object1 和 object2 都引用完全相同的对象实例,则结果为False;否则,结果为 True。

  • Like 运算符 - 它将字符串与模式进行比较。

逻辑/位运算符

下表显示了 VB.Net 支持的所有逻辑运算符。假设变量 A 的布尔值为 True,变量 B 的布尔值为 False,则:

显示示例

运算符 描述 示例
And 它是逻辑 AND 运算符也是位 AND 运算符。如果两个操作数都为真,则条件为真。此运算符不执行短路,即它会评估两个表达式。 (A And B) 为假。
Or 它是逻辑 OR 运算符也是位 OR 运算符。如果两个操作数中任何一个为真,则条件为真。此运算符不执行短路,即它会评估两个表达式。 (A Or B) 为真。
Not 它是逻辑 NOT 运算符也是位 NOT 运算符。用于反转其操作数的逻辑状态。如果条件为真,则逻辑 NOT 运算符将使其为假。 Not(A And B) 为真。
Xor 它是逻辑异或运算符也是位异或运算符。如果两个表达式都为真或都为假,则返回 True;否则返回 False。此运算符不执行短路,它始终评估两个表达式,并且此运算符没有短路对应项。 A Xor B 为真。
AndAlso 它是逻辑 AND 运算符。它仅对布尔数据有效。它执行短路。 (A AndAlso B) 为假。
OrElse 它是逻辑 OR 运算符。它仅对布尔数据有效。它执行短路。 (A OrElse B) 为真。
IsFalse 它确定表达式是否为假。
IsTrue 它确定表达式是否为真。

位移运算符

我们已经讨论了位运算符。位移运算符对二进制值执行移位操作。在介绍位移运算符之前,让我们了解一下位操作。

位运算符作用于位并执行逐位运算。&,| 和 ^ 的真值表如下:

p q p & q p | q p ^ q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

假设 A = 60;B = 13;现在以二进制格式,它们将如下所示:

A = 0011 1100

B = 0000 1101

-----------------

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A  = 1100 0011

我们已经看到 VB.Net 支持的位运算符是 And、Or、Xor 和 Not。位移运算符是 >> 和 <<,分别用于左移和右移。

假设变量 A 的值为 60,变量 B 的值为 13,则:

显示示例

运算符 描述 示例
And 按位 AND 运算符复制如果它同时存在于两个操作数中的位。 (A AND B) 将得到 12,即 0000 1100
Or 二进制 OR 运算符复制如果它存在于任何一个操作数中的位。 (A Or B) 将得到 61,即 0011 1101
Xor 二进制 XOR 运算符复制如果它在一个操作数中设置但在另一个操作数中未设置的位。 (A Xor B) 将得到 49,即 0011 0001
Not 二进制反码运算符是单目运算符,它具有“翻转”位的效果。 (Not A ) 将得到 -61,由于带符号二进制数,在二进制补码形式下为 1100 0011。
<< 二进制左移运算符。左操作数的值向左移动由右操作数指定的位数。 A << 2 将得到 240,即 1111 0000
>> 二进制右移运算符。左操作数的值向右移动由右操作数指定的位数。 A >> 2 将得到 15,即 0000 1111

赋值运算符

VB.Net 支持以下赋值运算符:

显示示例

运算符 描述 示例
= 简单的赋值运算符,将值从右侧操作数赋值给左侧操作数 C = A + B 将 A + B 的值赋给 C
+= 加法赋值运算符,它将右侧操作数添加到左侧操作数并将结果赋给左侧操作数 C += A 等效于 C = C + A
-= 减法赋值运算符,它从左侧操作数中减去右侧操作数并将结果赋给左侧操作数 C -= A 等效于 C = C - A
*= 乘法赋值运算符,它将右侧操作数乘以左侧操作数并将结果赋给左侧操作数 C *= A 等效于 C = C * A
/= 除法赋值运算符,它将左侧操作数除以右侧操作数并将结果赋给左侧操作数(浮点除法) C /= A 等效于 C = C / A
\= 除法赋值运算符,它将左侧操作数除以右侧操作数并将结果赋给左侧操作数(整数除法) C \= A 等效于 C = C \A
^= 幂运算和赋值运算符。它将左侧操作数提升到右侧操作数的幂并将结果赋给左侧操作数。 C^=A 等效于 C = C ^ A
<<= 左移赋值运算符 C <<= 2 等同于 C = C << 2
>>= 右移赋值运算符 C >>= 2 等同于 C = C >> 2
&= 将字符串表达式连接到字符串变量或属性并将结果赋给变量或属性。

Str1 &= Str2 等同于

Str1 = Str1 & Str2

其他运算符

VB.Net 还支持其他一些重要的运算符。

显示示例

运算符 描述 示例
AddressOf 返回过程的地址。
AddHandler Button1.Click,
AddressOf Button1_Click
Await 它应用于异步方法或 lambda 表达式中的操作数,以挂起方法的执行,直到等待的任务完成。
 
Dim result As res
= Await AsyncMethodThatReturnsResult()
Await AsyncMethod()
GetType 它为指定类型返回一个 Type 对象。Type 对象提供有关类型的信息,例如其属性、方法和事件。
MsgBox(GetType(Integer).ToString())
函数表达式 它声明定义函数 lambda 表达式的参数和代码。
Dim add5 = Function(num As
   Integer) num + 5
'prints 10
Console.WriteLine(add5(5))
If 它使用短路计算来有条件地返回两个值中的一个。If 运算符可以用三个参数或两个参数调用。
Dim num = 5
Console.WriteLine(If(num >= 0,
"Positive", "Negative"))

VB.Net 中运算符的优先级

运算符优先级决定了表达式中术语的分组。这会影响表达式的计算方式。某些运算符的优先级高于其他运算符;例如,乘法运算符的优先级高于加法运算符:

例如,x = 7 + 3 * 2;这里,x 被赋值为 13,而不是 20,因为运算符 * 的优先级高于 +,所以它首先与 3*2 相乘,然后加到 7 中。

这里,优先级最高的运算符出现在表的上方,优先级最低的运算符出现在下方。在表达式中,优先级高的运算符将首先计算。

显示示例

运算符 优先级
Await 最高
幂运算 (^)
一元标识和否定 (+, -)
乘法和浮点除法 (*, /)
整数除法 (\)
模运算 (Mod)
加法和减法 (+, -)
算术位移 (<<, >>)
所有比较运算符 (=, <>, <, <=, >, >=, Is, IsNot, Like, TypeOf...Is)
否定 (Not)
合取 (And, AndAlso)
包含析取 (Or, OrElse)
异或 (Xor) 最低
广告