次の方法で共有


Xor 演算子 (Visual Basic)

2 つの Boolean 式に対して論理除外を実行するか、2 つの数値式でビットごとの除外を実行します。

構文

result = expression1 Xor expression2  

部品

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

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

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

注釈

ブール比較の場合、resultは、expression1expression2のいずれかがTrueに評価された場合にのみTrueされます。 つまり、 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。 ビットごとの比較では、結果のデータ型は、 expression1expression2のデータ型に適した数値型です。 演算子の結果のデータ型の「リレーショナル比較とビットごとの比較」の表を参照してください。

オーバーロード

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

例 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 の結果が生成されます。

こちらも参照ください