JavaのXOR演算子(^)とは?仕組みと実用例をわかりやすく解説
Javaにおけるビット単位のXOR(排他的論理和)演算子「^」は、2つのオペランドの対応するビットを比較し、ビットが異なる場合は「1」、同じ場合は「0」を返す演算子です。XORは左から右へ評価される二項演算子であり、boolean型や整数型(int、longなど)に適用できます。一方で、String型の引数に対しては定義されていないため、文字列そのものに直接適用することはできません。
XOR演算の真理値表
XORの動作は以下の真理値表のようにまとめられます。
| A | B | A ^ B |
|---|---|---|
| false / 0 | false / 0 | false / 0 |
| false / 0 | true / 1 | true / 1 |
| true / 1 | false / 0 | true / 1 |
| true / 1 | true / 1 | false / 0 |
例1:boolean値でのXOR演算
boolean型の値に対してXORを使うと、「どちらか一方だけがtrueの場合にtrue」となる論理演算として機能します。
public class XORTest1 {
public static void main(String[] args) {
boolean x = false;
boolean y = false;
boolean xXorY = x ^ y;
System.out.println("false XOR false: " + xXorY);
x = false;
y = true;
xXorY = x ^ y;
System.out.println("false XOR true: " + xXorY);
x = true;
y = false;
xXorY = x ^ y;
System.out.println("true XOR false: " + xXorY);
x = true;
y = true;
xXorY = x ^ y;
System.out.println("true XOR true: " + xXorY);
}
}出力結果
false XOR false: false false XOR true: true true XOR false: true true XOR true: false
例2:文字列内の文字同士でのXOR演算
String型自体にはXORを適用できませんが、charAt()メソッドで取り出したchar値(内部的には数値として扱われる)に対してはXORを使用できます。次の例では、2つの2進数を表す文字列の各桁同士でXORを計算しています。
public class XORTest2 {
public static void main(String[] args) {
String str1 = "1010100101";
String str2 = "1110000101";
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str1.length(); i++) {
sb.append(str1.charAt(i) ^ str2.charAt(i));
}
System.out.println(sb);
}
}出力結果
0100100000
XOR演算子の主な活用シーン
- フラグの切り替え: 同じ値で2回XORを適用すると元に戻る性質(自己逆性)を利用して、状態のオン・オフを簡単に切り替えられます。
- 暗号化・復号化: 平文と鍵のXORを取ることで簡易的な暗号化が可能で、同じ鍵でもう一度XORを取ると復号できます。
- データの比較・チェックサム: データ整合性の確認や誤り検出に利用されます。
- 一時変数を使わない値の交換: 整数値同士をXORで入れ替えるテクニックとして知られています。
このように、XOR演算子は単純なビット操作にとどまらず、論理判定や暗号処理など幅広い場面で役立つ重要な演算子です。挙動を正しく理解しておくことで、より効率的で洗練されたJavaコードを書けるようになります。
-
JavaにおけるHashSetの重要性とは?ハッシュによるデータ操作の基本を解説
JavaのHashSetは、ハッシュ(Hashing)の仕組みを利用してデータを管理するコレクションクラスです。要素の追加・検索・削除を高速に行えるのが最大の特徴で、重複しないデータの集合を扱う場面で非常に重要な役割を果たします。ここでは、実際のコード例を通じてHashSetの動作を確認してみましょう。 サンプルコード import java.util.*; public class Demo{ private final String f_str, l_str; public Demo(Stri
-
Java 9のdestroyForcibly()メソッドとは?プロセスを強制終了する方法を解説
destroyForcibly() メソッドは、実行中のプロセスを強制的に終了(キル)するために使用されます。このメソッドは、プロセスが正常に終了しない場合や、フリーズ(応答停止)してしまった場合に特に役立ちます。 例えば、destroyForcibly() を呼び出した後でも isAlive() メソッドが true を返すことがあります。これは、OSレベルでの終了処理が完了するまでに時間差があるためです。また、destroyForcibly() は終了要求が正常に受け付けられた場合は true を返し、そうでない場合は false を返します。 構文 boolean destroyForc