Java におけるビット単位 XOR 演算子

JavaJavaBeginner
オンラインで実践に進む

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

XOR 演算子は、Java でオペランドの個々のビットを比較するために使用されるビット単位演算子です。Java では、XOR 演算子はキャレット記号 (^) で表されます。これは 2 つのビットを比較するために使用され、比較されている 2 つのビットが異なる場合にのみ true を返します。

基本データ型での XOR の使用

Java では、XOR 演算子を任意の基本データ型で使用できます。基本データ型を使って XOR の真理値表を検証してみましょう。

public class XOR {
    public static void main(String[] args) {
        System.out.println("0 XOR 0: " + (0 ^ 0)); // 出力:0
        System.out.println("0 XOR 1: " + (0 ^ 1)); // 出力:1
        System.out.println("1 XOR 0: " + (1 ^ 0)); // 出力:1
        System.out.print("1 XOR 1: " + (1 ^ 1)); // 出力:0
    }
}

コードを実行するには、ファイル ~/project/XOR.java に保存し、ターミナルで次のコマンドを実行します。

cd ~/project/
javac XOR.java
java XOR

ブール値での XOR の使用

XOR はブール値でも機能します。ブール値の true と false を使って表を再現してみましょう。

public class XOR {
    public static void main(String[] args) {
        System.out.println("False XOR False: " + (false ^ false)); // 出力:false
        System.out.println("False XOR True: " + (false ^ true)); // 出力:true
        System.out.println("True XOR False: " + (true ^ false)); // 出力:true
        System.out.print("True XOR True: " + (true ^ true)); // 出力:false
    }
}

コードを実行するには、ファイル ~/project/XOR.java に保存し、ターミナルで次のコマンドを実行します。

cd ~/project/
javac XOR.java
java XOR

整数値での XOR の使用

XOR 演算子は 0 または 1 でない整数に対して使用できます。XOR 演算子は、整数の 2 進数に相当する個々のビットに対して機能します。

public class XOR {
    public static void main(String[] args) {
        System.out.println("9 XOR 15: " + (9 ^ 15)); // 出力:6
        System.out.println("1 XOR 20: " + (1 ^ 20)); // 出力:21
        System.out.println("7 XOR 7: " + (7 ^ 7)); // 出力:0
        System.out.print("32 XOR 0: " + (32 ^ 0)); // 出力:32
    }
}

コードを実行するには、ファイル ~/project/XOR.java に保存し、ターミナルで次のコマンドを実行します。

cd ~/project/
javac XOR.java
java XOR

XOR を使って繰り返されない整数を見つける

XOR 演算子を使って、整数の配列の中から繰り返されない整数を見つけることもできます。

public class XOR {
    public static int nonRepeatingInteger(int[] numArray) {
        int xor = numArray[0];
        for (int i = 1; i < numArray.length; i++)
            xor = xor ^ numArray[i];
        return xor;
    }

    public static void main(String[] args) {
        int[] arr = {10, 12, 5, 6, 10, 6, 12};
        int nonRepeatingNum = nonRepeatingInteger(arr);
        System.out.print("The non-repeating integer is: " + nonRepeatingNum);
    }
}

コードを実行するには、ファイル ~/project/XOR.java に保存し、ターミナルで次のコマンドを実行します。

cd ~/project/
javac XOR.java
java XOR

出力は以下の通りです。

The non-repeating integer is: 5

2 進数文字列の XOR を求める

XOR は基本データ型にのみ機能します。ただし、XOR 演算子と追加のロジックを使って 2 つの 2 進数文字列を XOR する独自のメソッドを書くことができます。

public class XOR {
    public static String binaryStringXOR(String binStr1, String binStr2) {
        String xor = "";
        // 2 つの文字列を同じ長さにするためにゼロを追加
        if (binStr1.length() > binStr2.length()) {
            String temp = "";
            for (int i = 0; i < binStr1.length() - binStr2.length(); i++)
                temp += "0";
            binStr2 = temp + binStr2;
        } else if (binStr2.length() > binStr1.length()) {
            String temp = "";
            for (int i = 0; i < binStr2.length() - binStr1.length(); i++)
                temp += "0";
            binStr1 = temp + binStr1;
        }
        for (int i = 0; i < binStr1.length(); i++) {
            xor += binStr1.charAt(i) ^ binStr2.charAt(i);
        }
        return xor;
    }

    public static void main(String[] args) {
        System.out.println("1001 XOR 1111: " + binaryStringXOR("1001", "1111"));
        System.out.println("1 XOR 10100: " + binaryStringXOR("1", "10100"));
        System.out.println("0111 XOR 1: " + binaryStringXOR("0111", "1"));
        System.out.print("100000 XOR 0: " + binaryStringXOR("100000", "0"));
    }
}

コードを実行するには、ファイル ~/project/XOR.java に保存し、ターミナルで次のコマンドを実行します。

cd ~/project/
javac XOR.java
java XOR

出力は以下の通りです。

1001 XOR 1111: 0110
1 XOR 10100: 10101
0111 XOR 1: 0110
100000 XOR 0: 100000

まとめ

この実験では、Java における XOR 演算の基本概念について学びました。XOR 演算子をブール型と整数型のデータにどのように使用できるかを示しました。また、2 つの 2 進数文字列を XOR するメソッドと、整数の配列の中から繰り返されない整数を見つけるメソッドを実装しました。