logo

C++ ビットごとの XOR 演算子

  • ビットごとの XOR 演算子とも呼ばれます。 排他的論理和
  • を使用して表されます。 '^'
  • 名前が示すように、それはに作用します ビットレベル オペランドの。
  • ビットごとの XOR 演算子は、ビットごとの演算子のカテゴリに分類されます。
  • ビットごとの排他的論理和演算子 (XOR) では 2 つのオペランドが必要で、これら 2 つのオペランドは XOR 記号 (つまり '^') で区切られます。
  • 2 つのオペランドに XOR 演算子を適用した後に得られる出力または結果を決定するには、XOR 演算子の論理真理値表に従う必要があります。
  • XOR 真理値表は、XOR 演算子の適切なロジックを使用して構築された数学表です。
  • XOR 演算子の背後で使用されるロジックは次のとおりです。 XOR 演算が 2 つに適用されるたびに 違う 2 つのオペランドのビットの場合、結果は常に次のようになります。 「1」、 そして、XOR 演算が 2 つに適用されると、 同じ 2 つのオペランドのビットの結果が出力を生成します 「0」。

排他的論理和 (XOR) 演算子の真理値表

2 つのオペランドがあるとします。最初のオペランドが A、2 番目のオペランドが B である場合、これら 2 つのオペランドによって形成される入力の合計の組み合わせは 4 になります。次の XOR 真理値表を使用して、対応する出力を決定します。結果は C でキャプチャされます。ここでは C = A ^ B。

この真理値表では、入力をビットの形式、つまり 0 と 1 で受け取り、出力もビットの形式、つまり 0 と 1 で生成されます。

C++ ビットごとの XOR 演算子

ここで、上記の XOR 真理値表では、オペランド A と B の値が異なる場合、つまり ( 0, 1 )、( 1, 0 ) の場合、出力される結果は常に 1 になることがわかります。オペランド A と B の値が同じ、つまり ( 0, 0 )、( 1, 1 ) の場合、出力される結果は常に 0 になります。

同様に、このようにして、次の真理値表を描くことができます。 ブール値 値 -

2 つのオペランドがあるとします。最初のものは そして2番目は B 。これら 2 つのオペランドによって形成される入力の合計の組み合わせは 4 になります。次の XOR 真理値表を使用して、対応する出力を決定します。結果は C に取り込まれます (ここでは C = A ^ B)。

この真理値表では、真理値、つまり True ( T ) と False ( F ) の形式で入力を受け取ります。出力は True 値、つまり T と F の形式でも生成されます。

C++ ビットごとの XOR 演算子

ここで、上記の XOR 真理値表では、オペランド A と B の値が異なる場合、つまり ( F, T )、( T, F ) の場合、結果は常に T になることがわかります。オペランド A と B の値が同じ、つまり ( F, F )、( T, T ) の場合、結果は常に F になります。

上の表から、次のことがわかります。 T ( True ) は 1 で示され、F ( False ) は 0 で示されます。

与えられた問題を解決するための手順 -

  1. 問題で指定されるオペランドは常に 10 進数値になります。
  2. まず、オペランドの値を次のように変換する必要があります。 バイナリ
  3. オペランドの値を 2 進数に変換した後、両方のオペランドを重ね合わせます。
  4. 排他的論理和 (XOR) 演算を適用する前に、次のことを確認してください。 桁数 それらの中で。
  5. 桁数が一致しない場合、小さいオペランドの左端に追加の 0 が桁数のバランスをとります。
  6. 最後に、上記の真理値表を利用して、XOR 演算を適用するために一度に 1 ビットずつ、オペランドに 1 つずつ XOR 演算を適用します。
  7. 最後に、結果はアウトプットという形で生成されます。
  8. 生成される出力はバイナリ形式になります。バイナリ形式を 10 進数形式に変換し、結果の値を書き留めます。

C++ でのビットごとの排他的論理和 (XOR) 演算の実行

例を使用して、C++ での XOR 演算の実行について詳しく理解してみましょう。

例 1: 整数値の排他的論理和を求めます。また、それを説明し、実行コードを C++ で記述します。

解決: 上記の質問で指定された対応する 2 つのオペランド、つまり 10 と 14 を格納する 2 つの変数 ' a ' と ' b ' を考えてみましょう。

ここで、a = 10、b = 14 です。

以下の手順に従って、指定された 2 つのオペランドの排他的論理和を求めます。

  1. 10 と 14 は 10 進形式であることがわかっており、ビットごとの XOR 演算を適用するには、それを 2 進形式に変換する必要があります。
  2. バイナリ形式 ' a '、つまり 10 は 「1010」 ' b ' のバイナリ形式、つまり 14 は 「1110」。
  3. ここで、a に存在する 2 進数の数が 4 であり、b に存在する 2 進数の数も 4 であることがわかります。したがって、両方の変数に存在する 2 進数の数は同じであり、すでにバランスが取れているため、バランスを取るためにさらに 0 の数を追加する必要はありません。
  4. ここで、「b」に存在する 2 進数を「a」に存在する 2 進数に当てはめます。
  5. 最後に、対応するビットに XOR 演算を 1 つずつ適用して一致させ、出力を書き留めます。
  6. 上記の質問が 10 進数形式で示されているように、最終的に生成される出力はバイナリ形式になるため、結果を 10 進数形式に変換する必要があります。

説明:

a = 10 (10 進数形式)

b = 14 (10 進数形式)

ここで、XOR b の場合、a と b をバイナリ形式に変換する必要があります。

ランダムSQLで並べ替える

a = 1010 (バイナリ形式)

b = 1110 (バイナリ形式)

ここで、a と b に XOR 演算を適用します。

a = 1010

b = 1110

---------------

a ^ b = 0100 (バイナリ形式)

a ^ b の結果は 0100 で、これはバイナリ形式です。

結果を 10 進数形式に変換すると、4 になります。

10^14 = 4

注: 上記の XOR 真理値表を使用すると、対応するビットの出力が生成されます。

ここで、C++ 言語で 10 と 14 にビットごとの XOR 演算を適用し、結果 (つまり 4) を取得します。

上記の例の C++ コード:

 //************************ C++ Code ****************************** #include using namespace std; int main () { int a, b, c ; // Initializing integer variables to store data values cout <' << endl ; cout <> a ; // taking a as input from user cout &lt;&gt; b ; // taking b as input from user c = a ^ b ; // storing XOR result of a and b in c cout &lt;&lt; &apos;Applying XOR operation on a and b: &apos;&lt;&lt; endl ; cout &lt;&lt; &apos;a ^ b = &apos; &lt;&lt; c &lt;&lt; endl ; // Printing the output } </'>

出力

C++ ビットごとの XOR 演算子

例 2: 整数値の排他的論理和を求めます。また、それを説明し、実行コードを C++ で記述します。

解決: 上記の質問で指定された対応する 2 つのオペランド、つまり 3 と 15 を格納する 2 つの変数 ' a ' と ' b ' を考えてみましょう。

ここで、a = 3、b = 15 です。

以下の手順に従って、指定された 2 つのオペランドの排他的論理和を求めます。

  1. 3 と 15 は 10 進形式であることがわかっており、ビットごとの XOR 演算を適用するには、それを 2 進形式に変換する必要があります。
  2. バイナリ形式 ' a '、つまり 3 は '十一' ' b ' のバイナリ形式、つまり 15 は 「1111」。
  3. ここで、a に存在する 2 進数の数が 2 であり、b に存在する 2 進数の数が 4 であることがわかります。したがって、両方の変数に存在する 2 進数の数は同じではありません。したがって、アンバランスなので、下位の 2 進数、つまり a の左側にさらに多くの 0 を追加する必要があります。これは ' 十一' 、バランスをとるために。
  4. バランスをとると、a の値は次のようになります。 「0011」 、b は 「1111」。
  5. ここで、「 b 」に存在する 2 進数を「 a 」に存在する 2 進数にまとめます。
  6. 最後に、対応するビットに XOR 演算を 1 つずつ適用して一致させ、出力を書き留めます。
  7. 上記の質問が 10 進数形式で示されているように、最終的に生成される出力はバイナリ形式になるため、結果を 10 進数形式に変換する必要があります。

説明:

a = 3 (10 進数形式)

b = 15 (10 進数形式)

ここで、XOR b の場合、a と b をバイナリ形式に変換する必要があります。

a = 0011 (バイナリ形式)

b = 1111 (バイナリ形式)

ここで、a と b に XOR 演算を適用します。

a = 0011

b = 1111

---------------

a ^ b = 1100 (バイナリ形式)

a ^ b の結果は 1100 で、これはバイナリ形式です。

結果を 10 進数形式に変換すると、12 になります。

3^15 = 12

注: 上記の XOR 真理値表を使用すると、対応するビットの出力が生成されます。

ここで、C++ 言語で 3 と 15 にビットごとの XOR 演算を適用し、結果 (12) を取得します。

上記の例の C++ コード:

 //************************ C++ Code ****************************** #include using namespace std; int main () { int a, b, c ; // Initializing integer variables to store data values cout <' << endl ; cout <> a ; // taking a as input from user cout &lt;&gt; b ; // taking b as input from user c = a ^ b ; // storing XOR result of a and b in c cout &lt;&lt; &apos;Applying XOR operation on a and b: &apos;&lt;&lt; endl ; cout &lt;&lt; &apos;a ^ b = &apos; &lt;&lt; c &lt;&lt; endl ; // Printing the output } </'>

出力

C++ ビットごとの XOR 演算子