按位交换,无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

上一篇: Bitwise swap without XOR

下一篇: Bitwise Xor optimizing and/or/not use