C++ の論理 XOR
Suraj P
2023年10月12日
-
C++ の論理
XOR
-
C++ のブールオペランドで論理
XOR
を使用する -
C++ の非ブールオペランドで論理
XOR
を使用する -
C++ の複雑な式で論理
XOR
を使用する -
C++ で
mod 2
操作を使用して論理XOR
を実装する
このチュートリアルでは、C++ で論理 XOR
を実装する方法を学習します。
C++ の論理 XOR
C++ では、論理 OR(||)
と論理 AND(&&)
がありますが、論理 XOR
はありません。既存の演算子を使用して、論理 XOR
の機能を模倣できます。
論理的な XOR
演算子は、ブール値を持つ単なる同等の等しくない
演算子であるため、C++ には存在しません。
したがって、一般的な構文は次のようになります。A と B はブール値です。
A logical XOR B is equivalent to A!=B
XOR
の真理値表を見ると、XOR
はブール値の不等式
チェッカーにすぎないことがわかります。したがって、等しくない (!=)
演算子を使用して、論理的な XOR
を模倣できます。
C++ のブールオペランドで論理 XOR
を使用する
#include <bits/stdc++.h>
using namespace std;
int main() {
bool a = 0;
bool b = 1;
if (a != b) {
cout << "Yes\n";
}
else
cout << "NO\n";
}
出力:
Yes
C++ の非ブールオペランドで論理 XOR
を使用する
ここで変更を加える必要があります。値は非ブール値であるため、最初にブール値に変換してから、等しくない (!=)
演算子を適用する必要があります。
#include <bits/stdc++.h>
using namespace std;
int main() {
int a = 10;
int b = 20;
if ((!a) != (!b)) {
cout << "Yes\n";
} else
cout << "NO\n";
}
出力:
NO
!
を使用しましたここでは、値をブール値に変換して否定し、2つの等しくない正の整数(true
)が false
として評価されるようにします。
C++ の複雑な式で論理 XOR
を使用する
最初に値をブール値に変換してから、論理 XOR
演算を実行する必要があることを理解しました。このアイデアを拡張して、複雑な操作に対して論理的な XOR
操作を実行します。
#include <bits/stdc++.h>
using namespace std;
int main() {
int a = 10;
int b = 20;
int x = 50;
int y = 100;
if (!(a < b) != !(x >= y)) {
cout << "Yes\n";
} else
cout << "NO";
}
(a<b) Logical XOR (x>=y)
は!(a < b) != !(x >= y)
と記述されていることがわかります。
出力:
Yes
C++ で mod 2
操作を使用して論理 XOR
を実装する
2つのブール値の間に論理 XOR
を実装するもう 1つの方法は、モジュラス 2 演算を使用することです。A 論理 XOR B
は (A+B) % mod 2
と書くことができます。
#include <bits/stdc++.h>
using namespace std;
bool XOR(bool x, bool y) { return (x + y) % 2; }
int main() {
cout << "XOR(0, 0): " << XOR(0, 0) << endl;
cout << "XOR(1, 0): " << XOR(1, 0) << endl;
}
出力:
XOR(0, 0): 0
XOR(1, 0): 1
著者: Suraj P