对所有整数值范围交换两个整数而不使用第三个变量

时间:2014-10-10 02:00:11

标签: c#

如何在不使用第三个变量的情况下交换2个整数,使其适用于所有整数范围。 我知道通常我们会遵循以下逻辑。

        int a, b;

        a = 10;
        b = 30;
        a = a + b;
        b = a - b;
        a = a - b;

但如果(a + b)给出的值大于整数范围,则此逻辑将失败。 还有其他逻辑吗?

3 个答案:

答案 0 :(得分:2)

我相信你正在寻找XOR swap

if (a != b) {
    a ^= b;
    b ^= a;
    a ^= b;
}

答案 1 :(得分:1)

您可以使用xor ...

x ^= y;
y ^= x;
x ^= y;

Source有一个方便的现场演示。

答案 2 :(得分:1)

int a=10;
int b=20;

a=a^b;
b=a^b;
a=a^b;
Console.WriteLine(a);
Console.WriteLine(b);