Java 中的 XOR 和 XNOR 运算符

17 Mar 2025 | 4 分钟阅读

Java 提供的位运算符之一是 XOR。XOR(也称为异或)接受两个布尔操作数,如果它们不同则返回 true。当提供的两个布尔条件不能同时为真时,XOR 运算符最有用。

Java 中的 XOR 运算符(异或)

插入符 ( ) 符号表示 XOR 运算符。如果提供两个值,当它们不同时返回 true;否则返回 false。在二进制中,true 用 1 表示,false 用 0 表示。

XOR 运算符的真值表如下所示

XOR and XNOR operators in Java

从上表可以看出,只有当两个操作数的值不同时,它才返回 true。否则,返回 false。

让我们用一个例子来阐明这一点

一个好的 XOR 运算符示例

考虑下图

XorExpl1.java

输出

XOR and XNOR operators in Java

XNOR 运算符

XOR 的二进制等效值的相反数由 XNOR 提供。

真值表

XOR and XNOR operators in Java

如果位相同,则返回 1,否则返回 0。

示例

输入 10 20

输出 1

20 的二进制是 10100

10 的二进制是 1010

所以 XNOR 是 00001

所以输出是 1

输入 10 10

输出 15

10 的二进制是 1010

10 的二进制是 1010

所以 XNOR 是 1111

所以输出是 15

方法 1:(O(logn))

在此解决方案中,每个位都单独检查。如果两位匹配,则输出 1;否则输出 0。

让我们用下面的代码来解释它。

XNORExpl1.java

输出

XOR and XNOR operators in Java

第二种方法:O(1)

  1. 确定提供的两个数字中的最大值。
  2. 翻转前两个数字的位。
  3. 返回较大的原始数字与较小的已更改数字的 XOR。

XNORExpl2.java

输出

XOR and XNOR operators in Java

第三种方法:使用 XOR

简而言之,A XOR B 与 A 和 B 的 XNOR 相反。必须创建一个位掩码,以便仅从反转的二进制数字中提取实际的位数,因为直接反转任何二进制数字也会翻转前导零。

下面是这个实现的示例

XNORExpl3.java

输出

XOR and XNOR operators in Java

时间复杂度: O(1)

辅助空间: O(1)