Xor 演算子 (Visual Basic)

2 つの Boolean 式の場合は排他的論理和、2 つの数値式の場合はビットごとの排他を求めます。

構文

result = expression1 Xor expression2  

指定項目

result
必須です。 任意の Boolean または数値変数。 ブール値の比較の場合、result は 2 つの Boolean 値の排他的論理和 (排他的論理和演算) です。 ビットごとの演算の場合、result は 2 つの数値ビット パターンのビットごとの排他 (ビットごとの排他的論理和演算) を表す数値です。

expression1
必須です。 任意の Boolean または数値式。

expression2
必須です。 任意の Boolean または数値式。

Remarks

ブール値の比較では、expression1expression2 のうち 1 つだけが True に評価される場合にのみ、resultTrue になります。 つまり、expression1expression2 とが逆の Boolean 値に評価される場合、かつその場合に限ります。 次の表は、result がどのように決定されるかを示しています。

expression1 が次の場合 かつ、expression2 が次の場合 result の値は次のようになります
True True False
True False True
False True True
False False False

注意

ブール値の比較では、Xor 演算子は常に両方の式を評価します。これには、プロシージャ呼び出しを含めることができます。 結果は常に両方のオペランドに依存するため、Xor に対応するショートサーキットはありません。 "ショートサーキット" 論理演算子については、「AndAlso 演算子」、および「OrElse 演算子」を参照してください。

ビットごとの演算の場合、Xor 演算子は、2 つの数値式でまったく同じ位置にあるビットのビットごとの比較を実行し、次の表に従って 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 になることを確認します。これは 10 進数 6 のバイナリ表現です。

データの種類

オペランドが 1 つの Boolean 式と 1 つの数値式で構成されている場合、Visual Basic は Boolean 式を数値に変換し (True の場合は 1、False の場合は 0)、ビットごとの演算を実行します。

Boolean の比較の場合、結果のデータ型は Boolean になります。 ビットごとの比較の場合、結果のデータ型は expression1 および expression2 のデータ型に適した数値型になります。 「演算子の結果のデータ型」の「関係とビットごとの比較」の表を参照してください。

オーバーロード

Xor 演算子を "オーバーロード" できます。つまり、オペランドの型がクラスまたは構造体であるとき、そのクラスまたは構造体で、演算子の動作を再定義できます。 コード内で、そのようなクラスまたは構造体に対してこの演算子が使用されている場合は、再定義されたその動作を必ず理解してください。 詳細については、「 Operator Procedures」を参照してください。

例 1

次の例では、Xor 演算子を使用して、2 つの式の排他的論理和 (排他的論理和演算) を実行します。 結果は、それらの式のうちの 1 つだけが 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

前の例では、それぞれ FalseTrue、および False の結果が生成されます。

例 2

次の例では、Xor 演算子を使用して、2 つの数値式の個々のビットに対して排他的論理和 (排他的論理和演算) を実行します。 オペランド内の対応するビットのうちの 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 の結果が生成されます。

関連項目