按位交换,无XOR
我需要在没有XOR和算术运算的情况下交换两个变量。 我所能使用的只是像〜,&,|,<<,>>等按位运算。
我了解XOR方法,但无法找出解决方法。
编辑:临时变量也不允许。
由于XOR是AND和NOT的组合,所以您只需要在Java中实现它即可:
static int nand(int a, int b) {
return ~(a & b);
}
static int xor(int a, int b) {
return nand(nand(a, nand(a, b)), nand(b, nand(a, b)));
}
有了这个实现,你可以使用XOR进行交换。
正如在dasblinkenlight的答案中所示, xor
可以用nand
来模拟, not
包括和and
。 类似地, xor
可以用模拟, nor
可以由not
和和or
组成。
表达式看起来有点复杂......
public class XorTest
{
public static void main(String[] args)
{
testNand();
testNor();
}
private static void testNand()
{
int a = 1234;
int b = 5678;
a = xorNand(a, b);
b = xorNand(b, a);
a = xorNand(a, b);
System.out.println(a);
System.out.println(b);
}
private static void testNor()
{
int a = 1234;
int b = 5678;
a = xorNor(a, b);
b = xorNor(b, a);
a = xorNor(a, b);
System.out.println(a);
System.out.println(b);
}
private static int xorNand(int a, int b)
{
return ~(~(a & ~(a & b)) & ~(b & ~(a & b)));
}
static int xorNor(int a, int b)
{
return ~(~(~(a | a) | ~(b | b)) | ~(a | b));
}
}
但我无法想象一种与换档或其他“新型操作员组合”相同的“唯一”方式 - 无论这应该是什么意思,完全是......
链接地址: http://www.djcxy.com/p/58203.html