2 つの Boolean
式に対して論理除外を実行するか、2 つの数値式でビットごとの除外を実行します。
構文
result = expression1 Xor expression2
部品
result
必須。 任意の Boolean
または数値変数。 ブール比較の場合、 result
は 2 つの Boolean
値の論理除外 (排他的論理和演算) です。 ビットごとの演算の場合、 result
は、2 つの数値ビット パターンのビットごとの除外 (排他的ビットごとの論理和) を表す数値です。
expression1
必須。 任意の Boolean
または数値式。
expression2
必須。 任意の Boolean
または数値式。
注釈
ブール比較の場合、result
は、expression1
とexpression2
のいずれかがTrue
に評価された場合にのみTrue
されます。 つまり、 expression1
と expression2
が反対の 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
演算子はオーバーロードできます。つまり、オペランドがそのクラスまたは構造体の型を持つ場合、クラスまたは構造体はその動作を再定義できます。 コードでこのようなクラスまたは構造体でこの演算子を使用する場合は、再定義された動作を理解していることを確認してください。 詳細については、「 演算子プロシージャ」を参照してください。
例 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
前の例では、それぞれ False
、 True
、および 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 の結果が生成されます。
こちらも参照ください
.NET