Java 带值异或
我想检查Java 带值异或,java,refactoring,xor,Java,Refactoring,Xor,我想检查a是否等于一个值,b是否等于另一个值,反之亦然 比如说 (a == 3 && b == 5) || (a == 5 && b == 3) 我知道如果它是boolean变量,我可以对它们进行异或运算。检查两个值时如何实现相同的功能?您的代码没有问题,没有更简单的方法。但是,您可以省略括号,因为&&绑定比|强。请参见。考虑以下两个方程: 如果你解这个方程组, 结果表明,满足这两个方程的值对只有(3,5)和(5,3)。 您可以使用此选项用算术重写复杂的布尔值:
a
是否等于一个值,b
是否等于另一个值,反之亦然
比如说
(a == 3 && b == 5) || (a == 5 && b == 3)
我知道如果它是
boolean
变量,我可以对它们进行异或运算。检查两个值时如何实现相同的功能?您的代码没有问题,没有更简单的方法。但是,您可以省略括号,因为&&
绑定比|
强。请参见。考虑以下两个方程:
如果你解这个方程组,
结果表明,满足这两个方程的值对只有(3,5)
和(5,3)
。
您可以使用此选项用算术重写复杂的布尔值:
(a + b == 8 && a * b == 15)
所以不是7个布尔条件,
现在有3个布尔条件+1个加法+1个乘法。
写起来比较短,但太聪明了。
最好保留您的原始版本。
如果(a+b==8&&Math.abs(a-b)==2)
可以使用许多技巧来模拟这种情况,有些更有效,有些则效率更低。但是你想在这里模仿XOR的什么特性?为什么?@Tunaki也适用于ifa==3+Integer.MIN\u VALUE
和b==5+Integer.MIN\u VALUE
@real怀疑紧凑性,很容易看出这些值必须是different@spyr03我不知道你是如何对布尔值使用xor的。您可以将(a==true&&b==false)| |(a==false&&b==true)
替换为!(a^b)
,但是a!=b
更简单。
(a + b == 8 && a * b == 15)