<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 運算符 > 原文: [https://zetcode.com/lang/visualbasic/operators/](https://zetcode.com/lang/visualbasic/operators/) 在 Visual Basic 教程的這一部分中,我們將討論運算符。 運算符是特殊符號,表示已執行某個過程。 編程語言的運算符來自數學。 程序員處理數據。 運算符用于處理數據。 我們有幾種類型的運算符: * 算術運算符 * 布爾運算符 * 關系運算符 * 按位運算符 一個運算符可以有一個或兩個操作數。 操作數是運算符的輸入(參數)之一。 僅使用一個操作數的那些運算符稱為一元運算符。 那些使用兩個操作數的對象稱為二進制運算符。 ```vb Option Strict On Module Example Sub Main() Console.WriteLine(2) Console.WriteLine(-2) Console.WriteLine(2+2) Console.WriteLine(2-2) End Sub End Module ``` +和-可以是加減運算符,也可以是一元符號運算符。 這取決于實際情況。 ```vb Option Strict On Module Example Dim a As Byte Sub Main() a = 1 Console.WriteLine(-a) ' Prints -1 Console.WriteLine(-(-a)) ' Prints 1 End Sub End Module ``` 加號可以用來表示我們有一個正數。 但是它通常不被使用。 減號更改值的符號。 ```vb Option Strict On Module Example Dim a As Byte Dim b As Byte Sub Main() a = 3 * 3 b = 2 + 2 Console.WriteLine(a) ' Prints 9 Console.WriteLine(b) ' Print 4 End Sub End Module ``` 乘法和加法運算符是二進制運算符的示例。 它們與兩個操作數一起使用。 ## 賦值運算符 賦值運算符`=`將值賦給變量。 `variable`是值的占位符。 在數學中,`=`運算符具有不同的含義。 在等式中,`=`運算符是一個相等運算符。 等式的左側等于右側。 ```vb x = 1 Console.WriteLine(x) ' Prints 1 ``` 在這里,我們為`x`變量分配一個數字。 ```vb x = x + 1 Console.WriteLine(x) ``` 先前的表達式在數學上沒有意義。 但這在編程中是合法的。 該表達式將`x`變量加 1。 右邊等于 2,并且 2 分配給`x`。 ```vb 3 = x ``` 此代碼示例導致語法錯誤。 我們無法為字面值分配值。 ## 算術運算符 下表是 Visual Basic 中的算術運算符表。 | 符號 | 名稱 | | --- | --- | | `+` | 加法 | | `-` | 減法 | | `*` | 乘法 | | `/` | 除法 | | `\` | 整數除法 | | `Mod` | 模數 | | `^` | 求冪 | 以下示例顯示了算術運算。 ```vb Option Strict On Module Example Dim a As Byte Dim b As Byte Dim c As Byte Dim add As Byte Dim sb As Byte Dim mult As Byte Dim div As Byte Sub Main() a = 10 b = 11 c = 12 add = a + b + c sb = c - a mult = a * b div = CType(c / 3, Byte) Console.WriteLine(add) Console.WriteLine(sb) Console.WriteLine(mult) Console.WriteLine(div) End Sub End Module ``` 在前面的示例中,我們使用加,減,乘和除運算。 這些都是數學所熟悉的。 ```vb $ ./arithmetic.exe 33 2 110 4 ``` 示例的輸出。 接下來,我們將說明正態除法和整數除法之間的區別。 ```vb Option Strict On Module Example Dim a As Single = 5 Dim b As Single = 2 Dim c As Single Sub Main() c = 5 / 2 Console.WriteLine(c) c = 5 \ 2 Console.WriteLine(c) End Sub End Module ``` 在前面的示例中,我們使用普通和整數除法運算符對兩個數進行除法。 Visual Basic 有兩個不同的除法運算符。 ```vb Dim a As Single = 5 ``` 我們使用浮點數據類型。 ```vb c = 5 / 2 Console.WriteLine(c) ``` 這是“正常”的分割操作。 它返回 2.5,如預期的那樣。 ```vb c = 5 \ 2 Console.WriteLine(c) ``` 這是整數除法。 此操作的結果始終為整數。 `c`變量的值為 2。 ```vb $ ./division.exe 2.5 2 ``` `division.exe`程序的結果。 我們將提到的最后兩個運算符是模運算符和冪運算符。 ```vb Console.WriteLine(9 Mod 4) ' Prints 1 ``` `Mod`運算符稱為模運算符。 它找到一個數除以另一個的余數。 `9 Mod 4`,9 模 4 為 1,因為 4 兩次乘以 9,余數為 1。例如,當我們要檢查素數時,模運算符會很方便。 最后,我們將提到求冪運算符。 ```vb Console.WriteLine(9 ^ 2) ' Prints 81 ``` 9 ^ 2 = 9 * 9 = 81 ## 連接字符串 在 Visual Basic 中,我們有兩個用于字符串連接的運算符。 加號`+`運算符和`&`和號運算符。 ```vb Option Strict On Module Example Sub Main() Console.WriteLine("Return " & "of " & "the king") Console.WriteLine("Return " + "of " + "the king") End Sub End Module ``` 我們使用兩個運算符將三個字符串連接在一起。 ```vb $ ./concatstrings.exe Return of the king Return of the king ``` 這就是我們得到的。 兩種情況的結果相同。 ## 布爾運算符 在 Visual Basic 中,我們具有以下邏輯運算符。 布爾運算符也稱為邏輯運算符。 | 符號 | 名稱 | | --- | --- | | `And` | 邏輯與 | | `AndAlso` | 短路與 | | `Or` | 邏輯或 | | `OrElse` | 短路或 | | `Xor` | 邏輯異或 | | `Not` | 否定 | 布爾運算符用于處理真值。 ```vb Option Strict On Module Example Dim x As Byte = 3 Dim y As Byte = 8 Sub Main() Console.WriteLine(x = y) Console.WriteLine(y > x) If (y > x) Console.WriteLine("y is greater than x") End If End Sub End Module ``` 許多表達式導致布爾值。 布爾值用于條件語句中。 ```vb Console.WriteLine(x = y) Console.WriteLine(y > x) ``` 關系運算符始終導致布爾值。 這兩行顯示`False`和`True`。 ```vb If (y > x) Console.WriteLine("y is greater than x") End If ``` 僅在滿足括號內的條件時才執行`If`語句的主體。 `x > y`返回`True`,因此消息`"y`大于`x"`被打印到終端。 ```vb Option Strict On Module Example Dim a As Boolean Dim b As Boolean Dim c As Boolean Dim d As Boolean Sub Main() a = (True And True) b = (True And False) c = (False And True) d = (False And False) Console.WriteLine(a) Console.WriteLine(b) Console.WriteLine(c) Console.WriteLine(d) End Sub End Module ``` 示例顯示了邏輯`And`運算符。 僅當兩個操作數均為`True`時,它的求值結果為`True`。 ```vb $ ./andop.exe True False False False ``` 如果正好一個操作數為`True`,則邏輯`Xor`運算符的計算結果為`True`。 ```vb Option Strict On Module Example Dim a As Boolean Dim b As Boolean Dim c As Boolean Dim d As Boolean Sub Main a = (True Xor True) b = (True Xor False) c = (False Xor True) d = (False Xor False) Console.WriteLine(a) Console.WriteLine(b) Console.WriteLine(c) Console.WriteLine(d) End Sub End Module ``` 如果兩個操作數均為`True`或均為`False`,則邏輯`Xor`的計算結果為`False`。 ```vb $ ./xorop.exe False True True False ``` 如果兩個操作數中的任何一個為`True`,則邏輯`Or`運算符的計算結果為`True`。 ```vb Option Strict On Module Example Sub Main() Dim a As Boolean = True Or True Dim b As Boolean = True Or False Dim c As Boolean = False Or True Dim d As Boolean = False Or False Console.WriteLine(a) Console.WriteLine(b) Console.WriteLine(c) Console.WriteLine(d) End Sub End Module ``` 如果運算符的任一側為 True,則運算結果為 True。 ```vb $ ./orop.exe True True True False ``` 否定運算符`Not`設為`True False`和`False True`。 ```vb Option Strict On Module Example Sub Main() Console.WriteLine(Not True) Console.WriteLine(Not False) Console.WriteLine(Not (4 < 3)) End Sub End Module ``` 該示例顯示了否定運算符的作用。 ```vb $ ./negation.exe False True True ``` `AndAlso`和`OrElse`運算符經過短路求值。 短路求值意味著僅當第一個參數不足以確定表達式的值時才求值第二個參數:當`And`的第一個參數求值為`false`時,總值必須為`false`; 并且當`Or`的第一個參數計算為`true`時,總值必須為`true`。 (維基百科)短路求值主要用于提高性能。 一個例子可以使這一點更加清楚。 ```vb Option Strict On Module Example Sub Main() Console.WriteLine("Short circuit") If (one AndAlso two) Console.WriteLine("Pass") End If Console.WriteLine("#############") If (one And two) Console.WriteLine("Pass") End If End Sub Function one As Boolean Console.WriteLine("Inside one") Return False End Function Function two As Boolean Console.WriteLine("Inside two") Return True End Function End Module ``` 在示例中,我們有兩個函數。 函數與子例程不同,返回值。 這是它們之間的主要區別。 ```vb If (one AndAlso two) Console.WriteLine("Pass") End If ``` 一個函數返回`False`。 短路`AndAlso`不求值第二功能。 沒有必要。 一旦操作數為`False`,邏輯結論的結果始終為`False`。 控制臺上僅打印`"Inside one"`。 ```vb Console.WriteLine("#############") If (one And two) Console.WriteLine("Pass") End If ``` 在第二種情況下,我們使用`And`。 在這種情況下,兩個函數都被調用。 即使表達式的結果不是必需的。 ```vb $ ./shorcircuit.exe Short circuit Inside one ############# Inside one Inside two ``` `shorcircuit.exe`程序的結果。 ## 關系運算符 關系運算符用于比較值。 這些運算符總是產生布爾值。 | 符號 | 含義 | | --- | --- | | `<` | 小于 | | `<=` | 小于或等于 | | `>` | 大于 | | `>=` | 大于或等于 | | `==` | 等于 | | `<>` | 不等于 | | `Is` | 比較引用 | 關系運算符也稱為比較運算符。 ```vb Console.WriteLine(3 < 4) ' Prints True Console.WriteLine(3 = 4) ' Prints False Console.WriteLine(4 >= 3) ' Prints True ``` 正如我們已經提到的,關系運算符返回布爾值。 請注意,在 Visual Basic 中,比較運算符為`=`。 不像受 C 和 C 影響的語言那樣`==`。 注意,關系運算符不限于數字。 我們也可以將它們用于其他對象。 盡管它們可能并不總是有意義的。 ```vb Option Strict On Module Example Sub Main() Console.WriteLine("six" = "six") ' Prints True ' Console.WriteLine("a" > 6) this would throw ' an exception Console.WriteLine("a" < "b") ' Prints True End Sub End Module ``` 我們也可以比較字符串對象。 字符串上下文中的比較運算符比較字符的排序順序。 ```vb Console.WriteLine("a" < "b") ' Prints True ``` 這里到底發生了什么? 計算機不知道字符或字符串。 對于他們來說,一切都只是數字。 字符是存儲在特定表中的特殊數字。 類似于 ASCII。 ```vb Option Strict On Module Example Sub Main() Console.WriteLine("a" < "b") Console.WriteLine("a is: {0}", Asc("a")) Console.WriteLine("b is: {0}", Asc("b")) End Sub End Module ``` 在內部,a 和 b 字符是數字。 因此,當我們比較兩個字符時,我們將比較它們的存儲數字。 內置的`Asc`函數返回單個字符的 ASCII 值。 ```vb $ ./compare.exe True a is: 97 b is: 98 ``` 實際上,我們將 97 和 98 這兩個數字進行比較。 ```vb Console.WriteLine("ab" > "aa") ' Prints True ``` 假設我們有一個包含更多字符的字符串。 如果前幾個字符相等,我們將比較下一個字符。 在我們的情況下,第二個位置的 b 字符的值比 a 字符大。 這就是為什么`"ab"`字符串大于`"aa"`字符串的原因。 當然,以這種方式比較字符串沒有多大意義。 但這在技術上是可能的。 最后,我們將提到`Is`運算符。 運算符檢查兩個對象引用是否引用同一對象。 它不執行值比較。 ```vb Option Strict On Module Example Sub Main() Dim o1 As Object = New Object Dim o2 As Object = New Object Dim o3 As Object o3 = o2 Console.WriteLine(o1 Is o2) Console.WriteLine(o3 Is o2) End Sub End Module ``` 我們創建三個對象,并將它們與`Is`運算符進行比較。 ```vb Dim o1 As Object = New Object Dim o2 As Object = New Object ``` 我們聲明并初始化兩個`Object`實例。 `Object`類是.NET 框架中所有類的基類。 我們將在以后更詳細地描述它。 ```vb Dim o3 As Object ``` 僅聲明第三個變量。 ```vb o3 = o2 ``` `o3`現在引用`o2`對象。 它們是對同一對象的兩個引用。 ```vb Console.WriteLine(o1 Is o2) Console.WriteLine(o3 Is o2) ``` 在第一種情況下,我們得到`False`。 `o1`和`o2`是兩個不同的對象。 在第二種情況下,我們得到`True`。 `o3`和`o2`指的是同一對象。 ## 按位運算符 小數對人類是自然的。 二進制數是計算機固有的。 二進制,八進制,十進制或十六進制符號僅是相同數字的符號。 按位運算符使用二進制數的位。 像 Visual Basic 這樣的高級語言很少使用按位運算符。 | 符號 | 含義 | | --- | --- | | `Not` | 按位取反 | | `Xor` | 按位異或 | | `And` | 按位與 | | `Or` | 按位或 | 按位取反運算符分別將 1 更改為 0,將 0 更改為 1。 ```vb Console.WriteLine(Not 7) ' Prints -8 Console.WriteLine(Not -8) ' Prints 7 ``` 運算符恢復數字 7 的所有位。這些位之一還確定數字是否為負。 如果我們再一次對所有位取反,我們將再次得到 7。 按位,運算符在兩個數字之間進行逐位比較。 僅當操作數中的兩個對應位均為 1 時,位位置的結果才為 1。 ```vb 00110 And 00011 = 00010 ``` 第一個數字是二進制符號 6,第二個數字是 3,結果是 2。 ```vb Console.WriteLine(6 And 3) ' Prints 2 Console.WriteLine(3 And 6) ' Prints 2 ``` 按位或運算符在兩個數字之間進行逐位比較。 如果操作數中的任何對應位為 1,則位位置的結果為 1。 ```vb 00110 Or 00011 = 00111 ``` 結果為`00110`或十進制 7。 ```vb Console.WriteLine(6 Or 3) ' Prints 7 Console.WriteLine(3 Or 6) ' Prints 7 ``` 按位互斥或運算符在兩個數字之間進行逐位比較。 如果操作數中對應位中的一個或另一個(但不是全部)為 1,則位位置的結果為 1。 ```vb 00110 Xor 00011 = 00101 ``` 結果為`00101`或十進制 5。 ```vb Console.WriteLine(6 Xor 3) ' Prints 5 ``` ## 復合賦值運算符 復合賦值運算符由兩個運算符組成。 他們是速記員。 ```vb Option Strict On Module Example Dim a As Integer Sub Main a = 1 a = a + 1 Console.WriteLine(a) ' Prints 2 a += 1 Console.WriteLine(a) ' Prints 3 End Sub End Module ``` `+=`復合運算符是這些速記運算符之一。 它們比完整的表達式可讀性差,但是經驗豐富的程序員經常使用它們。 其他復合運算符是: ```vb -= *= \= /= &= ^= ``` ## 運算符優先級 運算符優先級告訴我們首先求值哪個運算符。 優先級對于避免表達式中的歧義是必要的。 以下表達式 28 或 40 的結果是什么? ```vb 3 + 5 * 5 ``` 像數學中一樣,乘法運算符的優先級高于加法運算符。 結果是 28。 ```vb (3 + 5) * 5 ``` 要更改求值的順序,可以使用括號。 括號內的表達式始終首先被求值。 下面的列表顯示了按優先級排序的常見 Visual Basic 運算符(優先級最高): | 運算符 | 描述 | | --- | --- | | `^` | 求冪 | | `+ -` | 一元加減 | | `* /` | 乘法,浮點除法 | | `\` | 整數除法 | | `Mod` | 模數 | | `+ -` | 加法,減法,字符串連接 | | `&` | 字符串連接 | | `<< >>` | 算術移位 | | `= <> < > >= <= Is IsNot Like TypeOf Is` | 所有比較運算符 | | `Not` | 否定 | | `And AndAlso` | 與 | | `Or OrElse` | 或 | | `Xor` | 異或 | 列表中同一行上的運算符具有相同的優先級。 ```vb Option Strict On Module Example Sub Main() Console.WriteLine(3 + 5 * 5) Console.WriteLine((3 + 5) * 5) Console.WriteLine(Not True Or True) Console.WriteLine(Not (True Or True)) End Sub End Module ``` 在此代碼示例中,我們顯示一些常見的表達式。 每個表達式的結果取決于優先級。 ```vb Console.WriteLine(3 + 5 * 5) ``` 該行打印 28。乘法運算符的優先級高于加法。 首先計算`5*5`的乘積。 然后添加 3。 ```vb Console.WriteLine(Not True Or True) ``` 在這種情況下,否定運算符具有更高的優先級。 首先,第一個`True`值被否定為`False`,然后`Or`運算符組合`False`和`True`,最后得到`True`。 ```vb $ ./precedence.exe 28 40 True False ``` ## 關聯性 有時,優先級不能令人滿意地確定表達式的結果。 還有另一個規則稱為關聯性。 運算符的關聯性確定優先級與相同的運算符的求值順序。 ```vb 9 / 3 * 3 ``` 這種表達的結果是什么? 9 還是 1? 乘法,刪除和模運算符從左到右關聯。 因此,該表達式的計算方式為:`(9 / 3) * 3`,結果為 9。 算術,布爾,關系和按位運算符都是左右關聯的。 另一方面,賦值運算符是正確關聯的。 ```vb a = b = c = d = 0 Console.WriteLine("{0} {1} {2} {3}", a, b, c, d) ' Prints 0 0 0 0 ``` 如果關聯從左到右,則以前的表達式將不可能。 復合賦值運算符從右到左關聯。 ```vb j = 0 j *= 3 + 1 Console.WriteLine(j) ``` 您可能期望結果為 1。但是實際結果為 0。由于有關聯性。 首先求值右邊的表達式,然后應用復合賦值運算符。 ## `AddressOf`運算符 `AddressOf`運算符創建一個指向另一個函數的函數委托。 委托是類型安全的函數指針,它們用于調用其他對象的方法。 ```vb Option Strict On Module Example Delegate Sub Display Dim msg As New Display(AddressOf Message1) Sub Main() msg.Invoke() msg = New Display(AddressOf Message2) msg.Invoke() End Sub Sub Message1() Console.WriteLine("This is message 1") End Sub Sub Message2() Console.WriteLine("This is message 2") End Sub End Module ``` 在代碼示例中,我們使用`AddressOf`運算符指向兩個不同的子例程。 ```vb Delegate Sub Display ``` 我們需要聲明一個委托。 ```vb Dim msg As New Display(AddressOf Message1) ``` 委托使用`AddressOf`運算符獲取子例程的地址。 現在,我們有一個指向`Message1()`子例程的類型安全指針。 ```vb msg.Invoke() ``` `Invoke()`方法調用委托指向的方法。 ```vb msg = New Display(AddressOf Message2) msg.Invoke() ``` 現在,我們為委托人提供另一個子例程的地址。 ```vb $ ./addressof.exe This is message 1 This is message 2 ``` 兩條消息都打印到控制臺。 在 Visual Basic 教程的這一部分中,我們介紹了運算符。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看