VB.Net – 运营商
VB.Net – 运营商
运算符是一个符号,它告诉编译器执行特定的数学或逻辑操作。VB.Net 内置丰富的运算符,并提供以下常用运算符类型 –
-
算术运算符
-
比较运算符
-
逻辑/位运算符
-
位移运算符
-
赋值运算符
-
杂项运算符
本教程将解释最常用的运算符。
算术运算符
下表显示了 VB.Net 支持的所有算术运算符。假设变量A 为2,变量B 为7,然后 –
Operator | 描述 | 例子 |
---|---|---|
^ | 将一个操作数提升到另一个操作数的幂 | 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,然后 –
Operator | 描述 | 例子 |
---|---|---|
= | 检查两个操作数的值是否相等;如果是,则条件变为真。 | (A = B) 是不正确的。 |
<> | 检查两个操作数的值是否相等;如果值不相等,则条件变为真。 | (A <> B) 是真的。 |
> | 检查左操作数的值是否大于右操作数的值;如果是,则条件变为真。 | (A > B) 不正确。 |
< | 检查左操作数的值是否小于右操作数的值;如果是,则条件变为真。 | (A < B) 是真的。 |
>= | 检查左操作数的值是否大于或等于右操作数的值;如果是,则条件变为真。 | (A >= B) 不是真的。 |
<= | 检查左操作数的值是否小于或等于右操作数的值;如果是,则条件变为真。 | (A <= B) 是真的。 |
除了上述之外,VB.Net 还提供了另外三个比较运算符,我们将在接下来的章节中使用它们;但是,我们在此进行简要说明。
-
Is Operator – 它比较两个对象引用变量并确定两个对象引用是否引用同一个对象而不执行值比较。如果 object1 和 object2 都引用完全相同的对象实例,则结果为True;否则,结果为假。
-
IsNot Operator – 它还比较两个对象引用变量并确定两个对象引用是否引用不同的对象。如果 object1 和 object2 都引用完全相同的对象实例,则结果为False;否则,结果为真。
-
Like Operator – 将字符串与模式进行比较。
逻辑/位运算符
下表显示了 VB.Net 支持的所有逻辑运算符。假设变量 A 保存布尔值 True,变量 B 保存布尔值 False,然后 –
Operator | 描述 | 例子 |
---|---|---|
And | 它是逻辑以及按位 AND 运算符。如果两个操作数都为真,则条件为真。此运算符不执行短路,即,它计算两个表达式。 | (A 和 B) 是假的。 |
Or | 它是逻辑以及按位 OR 运算符。如果两个操作数中的任何一个为真,则条件为真。此运算符不执行短路,即,它计算两个表达式。 | (A 或 B) 为真。 |
Not | 它是逻辑以及按位非运算符。用于反转其操作数的逻辑状态。如果条件为真,则逻辑非运算符将使假。 | Not(A And B) 为真。 |
Xor | 它是逻辑以及按位逻辑异或运算符。如果两个表达式都为 True 或两个表达式都为 False,则返回 True;否则返回 False。此运算符不执行短路,它始终计算两个表达式,并且没有此运算符的短路对应项。 | A Xor B 为真。 |
AndAlso | 它是逻辑与运算符。它仅适用于布尔数据。它执行短路。 | (A AndAlso B) 是假的。 |
OrElse | 它是逻辑 OR 运算符。它仅适用于布尔数据。它执行短路。 | (A OrElse B) 为真。 |
IsFalse | 它确定表达式是否为 False。 | |
IsTrue | 它确定表达式是否为 True。 |
位移运算符
我们已经讨论了按位运算符。移位运算符对二进制值执行移位操作。在进入移位运算符之前,让我们了解位操作。
按位运算符处理位并执行逐位运算。&、| 和 ^ 的真值表如下 –
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
乙 = 0000 1101
—————–
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
我们已经看到,VB.Net 支持的 Bitwise 运算符是 And、Or、Xor 和 Not。位移运算符是 >> 和 << 分别用于左移和右移。
假设变量 A 为 60,变量 B 为 13,然后 –
Operator | 描述 | 例子 |
---|---|---|
And | 如果两个操作数中都存在位,则按位 AND 运算符会将位复制到结果中。 | (A AND B) 将给出 12,即 0000 1100 |
Or | 如果任一操作数中存在二进制 OR 运算符,则复制一点。 | (A 或 B) 将给出 61,即 0011 1101 |
Xor | 二进制 XOR 运算符复制该位,如果它在一个操作数中设置,但不能同时在两个操作数中设置。 | (A Xor B) 将给出 49,即 0011 0001 |
Not | Binary Ones Complement Operator 是一元的,具有“翻转”位的效果。 | (不是 A )将给出 -61,由于带符号的二进制数,它是 2 的补码形式的 1100 0011。 |
<< | 二元左移运算符。左操作数值向左移动右操作数指定的位数。 | A << 2 将给出 240,即 1111 0000 |
>> | 二元右移运算符。左操作数的值向右移动右操作数指定的位数。 | A >> 2 将给出 15,即 0000 1111 |
赋值运算符
VB.Net 支持以下赋值运算符 –
Operator | 描述 | 例子 |
---|---|---|
= | 简单赋值运算符,将右侧操作数的值分配给左侧操作数 | C = A + B 将 A + B 的值赋给 C |
+= | 添加AND赋值运算符,它将右操作数添加到左操作数并将结果分配给左操作数 | C += A 等价于 C = C + A |
-= | 减与赋值运算符,它从左操作数中减去右操作数并将结果分配给左操作数 | C -= A 等价于 C = C – A |
*= | 与赋值运算符相乘,将右操作数与左操作数相乘,并将结果赋给左操作数 | C *= A 等价于 C = C * A |
/= | Divide AND 赋值运算符,它将左操作数与右操作数相除,并将结果分配给左操作数(浮点除法) | C /= A 等价于 C = C / A |
\= | Divide AND 赋值运算符,它将左操作数与右操作数相除,并将结果分配给左操作数(整数除法) | C \= A 等价于 C = C \A |
^= | 求幂和赋值运算符。它将左操作数提高到右操作数的幂,并将结果分配给左操作数。 | C^=A 等价于 C = C ^ A |
<<= | 左移 AND 赋值运算符 | C <<= 2 等同于 C = C << 2 |
>>= | 右移 AND 赋值运算符 | C >>= 2 与 C = C >> 2 相同 |
&= | 将字符串表达式连接到字符串变量或属性,并将结果分配给变量或属性。 |
Str1 &= Str2 与 Str1 = Str1 & Str2 |
杂项运算符
VB.Net 支持的其他重要运算符很少。
Operator | 描述 | 例子 |
---|---|---|
AddressOf | 返回过程的地址。 |
AddHandler Button1.Click, AddressOf Button1_Click |
Await | 它应用于异步方法或 lambda 表达式中的操作数,以暂停方法的执行,直到等待的任务完成。 |
Dim result As res = Await AsyncMethodThatReturnsResult() Await AsyncMethod() |
GetType | 它返回指定类型的 Type 对象。Type 对象提供有关类型的信息,例如其属性、方法和事件。 |
MsgBox(GetType(Integer).ToString()) |
Function Expression | 它声明了定义函数 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。
在这里,具有最高优先级的运算符出现在表格的顶部,具有最低优先级的运算符出现在底部。在表达式中,优先级更高的运算符将首先被评估。
Operator | 优先级 |
---|---|
Await | 最高 |
Exponentiation (^) | |
Unary identity and negation (+, -) | |
Multiplication and floating-point division (*, /) | |
Integer division (\) | |
Modulus arithmetic (Mod) | |
Addition and subtraction (+, -) | |
Arithmetic bit shift (<<, >>) | |
All comparison operators (=, <>, <, <=, >, >=, Is, IsNot, Like, TypeOf…Is) | |
Negation (Not) | |
Conjunction (And, AndAlso) | |
Inclusive disjunction (Or, OrElse) | |
Exclusive disjunction (Xor) | 最低 |