Xor 演算子 (Visual Basic)
更新 : 2007 年 11 月
2 つのブール (Boolean) 式の排他的論理和を求めます。または、2 つの数式のビットごとの排他を求めます。
result = expression1 Xor expression2
指定項目
result
必ず指定します。任意のブール変数または数値変数を指定します。ブール式の比較の場合、result は 2 つの Boolean 値の排他的論理和です。ビットごとの演算の場合、result は 2 つの数式のビットパターンの、ビットごとの排他的論理和を表す数値です。expression1
必ず指定します。任意のブール型 (Boolean) または数式を指定します。expression2
必ず指定します。任意のブール型 (Boolean) または数式を指定します。
解説
ブール値の比較の場合、result が True になるのは、expression1 と expression2 の一方だけが True と評価される場合だけです。つまり、expression1 と expression2 が反対の Boolean 値に評価される場合だけということです。次の表は、2 つの式と result の値の関係を示しています。
expression1 の値 |
expression2 の値 |
result の値 |
---|---|---|
True |
True |
False |
True |
False |
True |
False |
True |
True |
False |
False |
False |
メモ : |
---|
ブール式の比較の場合、Xor 演算子は必ず両方の式を評価します。これはプロシージャ呼び出しを作成する場合も同じです。Xor の結果は必ず 2 つのオペランドによって決まるため、この演算子に相当するショートサーキットはありません。ショートサーキット論理演算子については、「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 を対応する 2 進数 (それぞれ 101 と 011) に変換してみるとわかります。前出の表によると、101 Xor 011 の結果は 110 です。これは、10 進数の 6 を 2 進数で表した値です。
データ型
オペランドの一方が Boolean 式で、もう一方が数式の場合、Visual Basic は Boolean 式を数値 (True は -1、False は 0) に変換してから、ビットごとの演算を実行します。
Boolean 式の比較の場合、結果のデータ型は Boolean になります。ビットごとの比較の場合、結果のデータ型は expression1 と expression2 のデータ型に対して適切な数値型になります。「演算子の結果のデータ型」の「リレーショナルおよびビットごとの比較」の表を参照してください。
オーバーロード
Xor 演算子はオーバーロードできます。つまり、オペランドがクラスや構造体を型として持つ場合に、演算子の動作をそのクラスや構造体で再定義できるという意味です。このようなクラスまたは構造体でこの演算子を使用している場合、再定義された動作を確認してください。詳細については、「演算子プロシージャ」を参照してください。
使用例
Xor 演算子を使って 2 つの式の排他的論理和を求める例を次に示します。結果は、2 つの式のどちらか一方が 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 演算子を使って 2 つの数式のビットごとの排他的論理和を求める例を次に示します。オペランド内の、対応するビットのどちらか一方だけが 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 の結果を順に生成します。