VB.Net 运算符
-
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 示例
尝试一下Module operators Sub Main() Dim a As Integer = 21 Dim b As Integer = 10 Dim p As Integer = 2 Dim c As Integer Dim d As Single c = a + b Console.WriteLine("Line 1 - Value of c is {0}", c) c = a - b Console.WriteLine("Line 2 - Value of c is {0}", c) c = a * b Console.WriteLine("Line 3 - Value of c is {0}", c) d = a / b Console.WriteLine("Line 4 - Value of d is {0}", d) c = a \ b Console.WriteLine("Line 5 - Value of c is {0}", c) c = a Mod b Console.WriteLine("Line 6 - Value of c is {0}", c) c = b ^ p Console.WriteLine("Line 7 - Value of c is {0}", c) Console.ReadLine() End Sub End Module
-
比较运算符
下表显示了VB.Net 支持的所有比较运算符。假设变量A持有10,变量B持有20,则-运算符 描述 例子 = 检查两个操作数的值是否相等,如果是,则条件为真。 (A = B)为False。 <> 检查两个操作数的值是否相等,如果值不相等,则条件为真。 (A <> B)为True。 > 检查左操作数的值是否大于右操作数的值,如果是,则条件为真。 (A > B) 为False。 < 检查左操作数的值是否小于右操作数的值,如果是,则条件为真。 (A < B) 为True。 >= 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件为真。 (A >= B)为False。 <= 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件为真。 (A <= B)为True。 除上述内容外,VB.Net还提供了三个比较运算符,我们将在以后的章节中使用它们。但是,我们在这里进行简要说明。- Is- 它比较两个对象引用变量,并确定两个对象引用是否引用同一对象而不执行值比较。如果object1和object2都引用完全相同的对象实例,则结果为True;否则,结果为False。
- IsNot- 还比较两个对象引用变量,并确定两个对象引用是否引用了不同的对象。如果object1和object2都引用完全相同的对象实例,则结果为False;否则,结果为True。
- Like- 将字符串与模式进行比较。
示例
尝试一下Module operators Sub Main() Dim a As Integer = 21 Dim b As Integer = 10 If (a = b) Then Console.WriteLine("Line 1 - a is equal to b") Else Console.WriteLine("Line 1 - a is not equal to b") End If If (a < b) Then Console.WriteLine("Line 2 - a is less than b") Else Console.WriteLine("Line 2 - a is not less than b") End If If (a > b) Then Console.WriteLine("Line 3 - a is greater than b") Else Console.WriteLine("Line 3 - a is not greater than b") End If ' Lets change value of a and b a = 5 b = 20 If (a <= b) Then Console.WriteLine("Line 4 - a is either less than or equal to b") End If If (b >= a) Then Console.WriteLine("Line 5 - b is either greater than or equal to b") End If Console.ReadLine() End Sub End Module
-
逻辑/按位 运算符
下表显示了VB.Net 支持的所有逻辑运算符。假设变量A的布尔值是True,变量B的布尔值是False,则-运算符 描述 例子 And 称为逻辑和按位与运算符。如果两个操作数都不为零,则条件为True。该运算符不执行短路,即,它对两个表达式求值。 (A And B)是False。 Or 称为逻辑和按位或运算符。如果两个操作数中的任何一个都不为零,则条件为真。该运算符不执行短路,即,它对两个表达式求值。 (A Or B)为True。 Not 称为逻辑和按位非运算符。用于反转其操作数的逻辑状态。如果条件为真,则逻辑非运算符将为假。 Not(A And B)是True。 Xor 它是逻辑和按位异或运算符,相异而或。如果两个表达式均为True或两个表达式均为False,则返回False。否则返回True。该运算符不执行短路运算,它始终对两个表达式求值,并且该运算符不存在短路运算符。 A Xor B 是True。 AndAlso 它是逻辑AND运算符。它仅适用于布尔数据。它执行短路。 (A AndAlso B) 是 False. OrElse 它是逻辑OR运算符。它仅适用于布尔数据。它执行短路。 (A OrElse B) is True. IsFalse 它确定表达式是否为False。 IsTrue 它确定表达式是否为False。 示例
尝试一下Module logicalOp Sub Main() Dim a As Boolean = True Dim b As Boolean = True Dim c As Integer = 5 Dim d As Integer = 20 'logical And, Or and Xor Checking If (a And b) Then Console.WriteLine("Line 1 - Condition is true") End If If (a Or b) Then Console.WriteLine("Line 2 - Condition is true") End If If (a Xor b) Then Console.WriteLine("Line 3 - Condition is true") End If 'bitwise And, Or and Xor Checking If (c And d) Then Console.WriteLine("Line 4 - Condition is true") End If If (c Or d) Then Console.WriteLine("Line 5 - Condition is true") End If If (c Or d) Then Console.WriteLine("Line 6 - Condition is true") End If 'Only logical operators If (a AndAlso b) Then Console.WriteLine("Line 7 - Condition is true") End If If (a OrElse b) Then Console.WriteLine("Line 8 - Condition is true") End If ' lets change the value of a and b a = False b = True If (a And b) Then Console.WriteLine("Line 9 - Condition is true") Else Console.WriteLine("Line 9 - Condition is not true") End If If (Not (a And b)) Then Console.WriteLine("Line 10 - Condition is true") End If Console.ReadLine() End Sub End Module
-
位移运算符
按位运算符对位进行运算并逐位执行操作。&,|和^的真值表如下-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。左移和右移的位移位运算符分别为>>和<<。下表列出了VB.Net 支持的按位运算符。假设变量A保持60,变量B保持13,则-运算符 描述 例子 And 如果两个操作数中都存在按位AND运算符,则将一位复制到结果中。 (A And B)将得到12,即0000 1100 Or 如果任一操作数中存在二进制或运算符,则会对其进行复制。 (A Or B)将得出61,即0011 1101 Not 二进制补码运算符是一元的,具有“翻转”位的作用。 (Not A)将给出-61,这是2的补码形式的1100 0011(由于带符号的二进制数)。 Xor 如果在一个操作数中设置了该位,但不是在两个操作数中都设置了位,则二进制XOR运算符将复制该位。 (A Xor B)将得到49,即0011 0001 << 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。 A << 2 = 240,即1111 0000 >> 二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 A >> 2 = 15,即0000 1111 示例
尝试一下Module BitwiseOp Sub Main() Dim a As Integer = 60 ' 60 = 0011 1100 Dim b As Integer = 13 ' 13 = 0000 1101 Dim c As Integer = 0 c = a And b ' 12 = 0000 1100 Console.WriteLine("Line 1 - Value of c is {0}", c) c = a Or b ' 61 = 0011 1101 Console.WriteLine("Line 2 - Value of c is {0}", c) c = a Xor b ' 49 = 0011 0001 Console.WriteLine("Line 3 - Value of c is {0}", c) c = Not a ' -61 = 1100 0011 Console.WriteLine("Line 4 - Value of c is {0}", c) c = a << 2 ' 240 = 1111 0000 Console.WriteLine("Line 5 - Value of c is {0}", c) c = a >> 2 ' 15 = 0000 1111 Console.WriteLine("Line 6 - Value of c is {0}", c) Console.ReadLine() End Sub End Module
-
赋值运算符
VB.Net 支持以下赋值运算符-运算符 描述 例子 = 简单的赋值运算符,将值从右侧操作数分配到左侧操作数 C = A + B将A + B的值赋给C += 添加AND赋值运算符,将右操作数添加到左操作数,并将结果分配给左操作数 C + = A等于C = C + A -= 减去AND赋值运算符,它从左操作数中减去右操作数,并将结果分配给左操作数 C -= A等效于C = C-A *= 将AND赋值运算符相乘,将右操作数与左操作数相乘并将结果分配给左操作数 C *= A等效于C = C * A /= 除法AND赋值运算符,它将左操作数除以右操作数,并将结果分配给左操作数 C /= A等于C = C / A \= 除法AND赋值运算符,它将左操作数除以右操作数,并将结果分配给左操作数(整数除法) C \= A等于C = C \ A ^= 求幂和赋值运算符。它将左操作数提高到右操作数的幂,并将结果分配给左操作数。 C ^= A等于C = C^A <<= 左移AND赋值运算符 C <<= 2与C = C << 2相同 >>= 右移和赋值运算符 C >>= 2与C = C >> 2相同 &= 将String表达式连接到String变量或属性,并将结果分配给该变量或属性。 Str1 &= Str2 与 Str1 = Str1 & Str2 相同 示例
尝试一下Module assignment Sub Main() Dim a As Integer = 21 Dim pow As Integer = 2 Dim str1 As String = "Hello! " Dim str2 As String = "VB Programmers" Dim c As Integer c = a Console.WriteLine("Line 1 - = Operator Example, _ Value of c = {0}", c) c += a Console.WriteLine("Line 2 - += Operator Example, _ Value of c = {0}", c) c -= a Console.WriteLine("Line 3 - -= Operator Example, _ Value of c = {0}", c) c *= a Console.WriteLine("Line 4 - *= Operator Example, _ Value of c = {0}", c) c /= a Console.WriteLine("Line 5 - /= Operator Example, _ Value of c = {0}", c) c = 20 c ^= pow Console.WriteLine("Line 6 - ^= Operator Example, _ Value of c = {0}", c) c <<= 2 Console.WriteLine("Line 7 - <<= Operator Example,_ Value of c = {0}", c) c >>= 2 Console.WriteLine("Line 8 - >>= Operator Example,_ Value of c = {0}", c) str1 &= str2 Console.WriteLine("Line 9 - &= Operator Example,_ Value of str1 = {0}", str1) Console.ReadLine() End Sub End Module
-
杂项运算符
还有一些其他重要的操作符,包括AddressOf, Await等。运算符 描述 例子 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"))
示例
尝试一下Module assignment Sub Main() Dim a As Integer = 21 Console.WriteLine(GetType(Integer).ToString()) Console.WriteLine(GetType(Double).ToString()) Console.WriteLine(GetType(String).ToString()) Dim multiplywith5 = Function(num As Integer) num * 5 Console.WriteLine(multiplywith5(5)) Console.WriteLine(If(a >= 0, "Positive", "Negative")) Console.ReadLine() End Sub End Module
-
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) 最低 示例
尝试一下Module assignment Sub Main() Dim a As Integer = 20 Dim b As Integer = 10 Dim c As Integer = 15 Dim d As Integer = 5 Dim e As Integer e = (a + b) * c / d ' ( 30 * 15 ) / 5 Console.WriteLine("Value of (a + b) * c / d is : {0}", e) e = ((a + b) * c) / d ' (30 * 15 ) / 5 Console.WriteLine("Value of ((a + b) * c) / d is : {0}", e) e = (a + b) * (c / d) ' (30) * (15/5) Console.WriteLine("Value of (a + b) * (c / d) is : {0}", e) e = a + (b * c) / d ' 20 + (150/5) Console.WriteLine("Value of a + (b * c) / d is : {0}", e) Console.ReadLine() End Sub End Module