没有异或的按位交换

Bitwise swap without XOR

我需要在不进行异或和算术运算的情况下交换两个变量。 我能用的只有像~、&、|、<<、>>等位运算

我理解 XOR 方法,但想不出相反的方法..

编辑:临时变量也是不允许的。

XOR is a combination of ANDs and NOTs 以来,您需要做的就是在 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)));
}

有了这个实施,您可以 swap using XOR

所示,xor可以用nand模拟,由notand组成。类似地,xor 可以用 nor 模拟,由 notor 组成。

表达式最后看起来有点复杂...

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));
    }
}

但我想不出一种方法可以对班次或其他 "only" 执行相同的操作 "novel combinations of operators" - 无论这意味着什么,确切地说...