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
    
    尝试一下