📜  在C / C++,Python,PHP和Java中交换两个变量

📅  最后修改于: 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

替代解决方案:

  • C++还提供了库函数swap()
  • b =(a + b)–(a = b);
  • a + = b –(b = a);
  • a = a * b /(b = a)