共用方式為


Xor 運算子 (Visual Basic)

對兩個 Boolean 運算式執行邏輯互斥 (Logical Exclusion),或對兩個數值運算式執行位元互斥 (Bitwise Exclusion)。

result = expression1 Xor expression2

組件

  • result
    必要項。 任何 Boolean 或數值變數。 若為布林比較,result 是兩個 Boolean 值的邏輯互斥 (獨佔邏輯分離)。 若為位元作業,result 為數值,代表兩個數值位元模式的位元排除 (獨佔位元分離)。

  • expression1
    必要項。 任何 Boolean 或數值運算式。

  • expression2
    必要項。 任何 Boolean 或數值運算式。

備註

對於 Boolean 比較而言,只有在 expression1 和 expression2 中只有一個評估為 True 時,result 才會是 True。 也就是說,只有 expression1 和 expression2 評估為相反的 Boolean 值時才會如此。 下表說明如何決定 result。

如果 expression1 為

且 expression2 是

result 的值為

True

True

False

True

False

True

False

True

True

False

False

False

注意事項注意事項

在布林比較中,Xor 運算子一律會評估兩個運算式,其中可以包括進行程序呼叫。沒有 Xor 的最少運算對應函式,因為結果一律取決於這兩個運算元。如需「最少運算」邏輯運算子的相關資訊,請參閱 AndAlso 運算子 (Visual Basic)OrElse 運算子 (Visual Basic)

就位元運算而論,Xor 運算子會對兩個數值運算式中同位置的位元執行位元比較,並依據下表來設定 result 中的對應位元。

如果 expression1 中的位元是

並且 expression2 中的位元是

result 中的位元是

1

1

0

1

0

1

0

1

1

0

0

0

注意事項注意事項

由於邏輯和位元運算子的優先順序低於其他算術和關係運算子,所以任何位元運算都必須加上括號,以確保執行結果的正確性。

例如,5 Xor 3 等於 6。 要知道為什麼,請將 5 和 3 轉換成二進位表示法 101 和 011, 然後使用前面的表格得出 101 Xor 011 等於 110,正是十進位數字 6 的二進位表示法。

資料型別

如果運算元是以一個 Boolean 運算式和一個數字運算式組成,則 Visual Basic 會將 Boolean 運算式轉換成數值 (-1 代表 True 而 0 代表 False),並執行位元運算。

若為 Boolean 比較,則結果的資料型別為 Boolean。 進行位元 (Bitwise) 比較時,結果資料型別會是數字型别,適用於 expression1 和 expression2 的資料型別。 請參閱運算子結果的資料型別 (Visual Basic)中的「關係和位元比較」表。

多載化

Xor 運算子可以「多載」,也就是,當運算元具備類別或結構的類型時,該類別或結構就可以重新定義其行為。 如果您的程式碼在這種類別或結構上使用此運算子,請確定了解其重新定義的行為。 如需詳細資訊,請參閱 運算子程序 (Visual Basic)

範例

下列範例會使用 Xor 運算子,對兩個運算式執行邏輯互斥 (獨佔邏輯分離)。 結果是代表兩個運算式中是否只有一個為 True 的 Boolean 值。

Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b Xor b > c
secondCheck = b > a Xor b > c
thirdCheck = b > a Xor c > b

前一個範例分別產生 False、True 和 False 的結果。

下列範例會使用 Xor 運算子,對兩個數值運算式的個別位元執行邏輯互斥 (獨佔邏輯分離)。 如果運算元中的對應位元只有其中一個是設為 1,則會將結果模式中的對應位元設為 1。

Dim a As Integer = 10 ' 1010 in binary
Dim b As Integer = 8  ' 1000 in binary
Dim c As Integer = 6  ' 0110 in binary
Dim firstPattern, secondPattern, thirdPattern As Integer
firstPattern = (a Xor b)  '  2, 0010 in binary
secondPattern = (a Xor c) ' 12, 1100 in binary
thirdPattern = (b Xor c)  ' 14, 1110 in binary

前一個範例分別產生 2、12 和 14 的結果。

請參閱

參考

邏輯/位元運算子 (Visual Basic)

Visual Basic 中的運算子優先順序

運算子 (依功能排列) (Visual Basic)

概念

Visual Basic 中的邏輯運算子和位元運算子