Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのXOR演算子(^)とは?仕組みと実用例をわかりやすく解説

Javaにおけるビット単位のXOR(排他的論理和)演算子「^」は、2つのオペランドの対応するビットを比較し、ビットが異なる場合は「1」同じ場合は「0」を返す演算子です。XORは左から右へ評価される二項演算子であり、boolean型や整数型(int、longなど)に適用できます。一方で、String型の引数に対しては定義されていないため、文字列そのものに直接適用することはできません。

XOR演算の真理値表

XORの動作は以下の真理値表のようにまとめられます。

ABA ^ B
false / 0false / 0false / 0
false / 0true / 1true / 1
true / 1false / 0true / 1
true / 1true / 1false / 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コードを書けるようになります。

  1. JavaにおけるHashSetの重要性とは?ハッシュによるデータ操作の基本を解説

    JavaのHashSetは、ハッシュ(Hashing)の仕組みを利用してデータを管理するコレクションクラスです。要素の追加・検索・削除を高速に行えるのが最大の特徴で、重複しないデータの集合を扱う場面で非常に重要な役割を果たします。ここでは、実際のコード例を通じてHashSetの動作を確認してみましょう。 サンプルコード import java.util.*; public class Demo{     private final String f_str, l_str;     public Demo(Stri

  2. Java 9のdestroyForcibly()メソッドとは?プロセスを強制終了する方法を解説

    destroyForcibly() メソッドは、実行中のプロセスを強制的に終了(キル)するために使用されます。このメソッドは、プロセスが正常に終了しない場合や、フリーズ(応答停止)してしまった場合に特に役立ちます。 例えば、destroyForcibly() を呼び出した後でも isAlive() メソッドが true を返すことがあります。これは、OSレベルでの終了処理が完了するまでに時間差があるためです。また、destroyForcibly() は終了要求が正常に受け付けられた場合は true を返し、そうでない場合は false を返します。 構文 boolean destroyForc