Xor 演算子 (Visual Basic)
2 つの Boolean
式の場合は排他的論理和、2 つの数値式の場合はビットごとの排他を求めます。
構文
result = expression1 Xor expression2
指定項目
result
必須です。 任意の Boolean
または数値変数。 ブール値の比較の場合、result
は 2 つの Boolean
値の排他的論理和 (排他的論理和演算) です。 ビットごとの演算の場合、result
は 2 つの数値ビット パターンのビットごとの排他 (ビットごとの排他的論理和演算) を表す数値です。
expression1
必須です。 任意の Boolean
または数値式。
expression2
必須です。 任意の Boolean
または数値式。
Remarks
ブール値の比較では、expression1
と expression2
のうち 1 つだけが 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 演算子」、および「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
前の例では、それぞれ 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