📅  最后修改于: 2020-01-13 11:56:03             🧑  作者: Mango
如何在不使用库函数的情况下交换两个变量?
Python:在Python中,有一个简单且语法简洁的结构来交换变量,我们只需要编写“ x,y = y,x”。
C / C++:以下是一种普遍提供的经典解决方案
// 不正确的交换变量,使用bitwise XOR
x ^= y ^= x ^= y;
上面的解决方案在C / C++中是错误的,因为它会导致未定义的行为(编译器可以以任何方式自由运行)。原因在表达式中多次修改变量会导致未定义的行为。
但是,我们可以使用逗号来引入序列点。所以修改后的解决方案是:
// 正确的交换变量,使用bitwise XOR /C/C++)
(x ^= y), (y ^= x), (x ^= y);
Java:在Java中,明确定义了子表达式求值的规则。在Java中,根据Java规则,表达式“ x ^ = y ^ = x ^ = y;”不能产生正确的结果。它使x =0。但是,我们可以使用“ x = x ^ y ^(y = x);”。请注意,表达式是从左到右计算的。如果最初x = 5且y = 10,则该表达式等效于“ x = 5 ^ 10 ^(y = 5);”。
C/C++:
// C/C++ 代码,交换连个变量
#include
int main()
{
int x = 5, y = 10;
(x ^= y), (y ^= x), (x ^= y);
printf("交换x和y之后是 %d %d",
x, y);
return 0;
}
Java:
// Java代码,交换连个变量
class GFG
{
public static void main (String[] args)
{
int x = 5, y = 10;
x = x ^ y ^ (y = x);
System.out.println("交换x和y之后是 "
+ x + " " + y);
}
}
Python:
# Python代码,交换连个变量
x = 5
y = 10
x, y = y, x
print "交换x和y之后是", x, y
C#:
// C#代码,交换连个变量
using System;
class GFG
{
static public void Main ()
{
int x = 5, y = 10;
x = x ^ y ^ (y = x);
Console.WriteLine("交换x和y之后是 " +
x + " " + y);
}
}
PHP:
输出:
交换x和y之后是 10 5
替代解决方案: