共用方式為


Xor 運算子 (Visual Basic)

更新:2007 年 11 月

對兩個 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

注意事項:

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

就位元運算而論,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 的資料型別。請參閱運算子結果的資料型別中的「關係和位元比較」表。

多載化

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

範例

下列範例會使用 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 中的運算子優先順序

運算子 (依功能排列)