Java 中的按位 XOR 运算符

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

XOR 运算符是 Java 中用于比较操作数各个位的按位运算符。在 Java 中,XOR 运算符由插入符号 (^) 表示。它用于比较两个位,并且仅当被比较的两个位不相同时返回 true。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java/BasicSyntaxGroup -.-> java/data_types("Data Types") java/BasicSyntaxGroup -.-> java/operators("Operators") java/BasicSyntaxGroup -.-> java/booleans("Booleans") java/BasicSyntaxGroup -.-> java/variables("Variables") java/BasicSyntaxGroup -.-> java/for_loop("For Loop") java/BasicSyntaxGroup -.-> java/output("Output") java/StringManipulationGroup -.-> java/strings("Strings") java/DataStructuresGroup -.-> java/arrays("Arrays") subgraph Lab Skills java/data_types -.-> lab-117997{{"Java 中的按位 XOR 运算符"}} java/operators -.-> lab-117997{{"Java 中的按位 XOR 运算符"}} java/booleans -.-> lab-117997{{"Java 中的按位 XOR 运算符"}} java/variables -.-> lab-117997{{"Java 中的按位 XOR 运算符"}} java/for_loop -.-> lab-117997{{"Java 中的按位 XOR 运算符"}} java/output -.-> lab-117997{{"Java 中的按位 XOR 运算符"}} java/strings -.-> lab-117997{{"Java 中的按位 XOR 运算符"}} java/arrays -.-> lab-117997{{"Java 中的按位 XOR 运算符"}} end

使用 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 运算符也可以用于布尔值。让我们使用布尔值 truefalse 重新创建真值表。

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 运算符会对整数的二进制表示的各个位进行操作。

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

查找二进制字符串的 XOR

XOR 运算符仅适用于基本数据类型。然而,我们可以编写自己的方法,利用 XOR 运算符和一些额外的逻辑来计算两个二进制字符串的 XOR。

public class XOR {
    public static String binaryStringXOR(String binStr1, String binStr2) {
        String xor = "";
        // 添加零以使两个字符串长度相等
        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 运算符。此外,我们还实现了一个方法来计算两个二进制字符串的 XOR,以及一个方法来查找整数数组中的非重复整数。