我们已经讨论了在不使用临时变量的情况下交换两个整数的不同方法。如何在不使用库函数的情况下交换一行?
Python:在Python,有一个简单且语法简洁的结构来交换变量,我们只需要编写“ x,y = y,x”。
C / C++:以下是一种普遍提供的经典解决方案
// Swap using bitwise XOR (Wrong Solution in C/C++)
x ^= y ^= x ^= y;
上面的解决方案在C / C++中是错误的,因为它会导致未定义的行为(编译器可以以任何方式自由运行)。原因是,如果修改之间没有序列点,则在表达式中多次修改变量会导致未定义的行为。
但是,我们可以使用逗号来引入序列点。所以修改后的解决方案是
// Swap using bitwise XOR (Correct Solution in C/C++)
// sequence point introduced using comma.
(x ^= y), (y ^= x), (x ^= y);
Java:在Java,明确定义了子表达式求值的规则。左操作数总是先于右操作数求值(有关更多详细信息,请参见此内容)。在Java,表达式“ x ^ = y ^ = x ^ = y;”根据Java规则无法产生正确的结果。它使x =0。但是,我们可以使用“ x = x ^ y ^(y = x);”请注意,表达式是从左到右计算的。如果最初x = 5且y = 10,则该表达式等效于“ x = 5 ^ 10 ^(y = 5);”。请注意,我们无法像在C / C++中那样在C / C++中使用此函数,未定义是否对任何运算符执行左操作数还是右操作数(有关更多详细信息,请参见此内容)
C
// C program to swap two variables in single line
#include
int main()
{
int x = 5, y = 10;
(x ^= y), (y ^= x), (x ^= y);
printf("After Swapping values of x and y are %d %d", x,
y);
return 0;
}
C++
// C++ code to swap using XOR
#include
using namespace std;
int main()
{
int x = 5, y = 10;
// Code to swap 'x' and 'y'
// to swap two numbers in one
// line
x = x ^ y, y = x ^ y, x = x ^ y;
// printing the swapped variables
cout << "After Swapping: x = "
<< x << ", y= " << y;
return 0;
}
Java
// Java program to swap two variables in a single line
class GFG {
public static void main(String[] args)
{
int x = 5, y = 10;
x = x ^ y ^ (y = x);
System.out.println(
"After Swapping values"
+" of x and y are " + x
+ " " + y);
}
}
Python
# Python program to swap two variables in a single line
x = 5
y = 10
x, y = y, x
print("After Swapping values of x and y are", x, y)
C#
// C# program to swap two
// variables in single line
using System;
class GFG {
static public void Main()
{
int x = 5, y = 10;
x = x ^ y ^ (y = x);
Console.WriteLine("After Swapping values "
+ "of x and y are " + x + " "
+ y);
}
}
// This code is contributed by aj_36
PHP
Javascript
输出:
After Swapping values of x and y are 10 5
替代解决方案:
- C++还提供了库函数swap()
- b =(a + b)–(a = b); [为此感谢Rajat Mishra]
- a + = b –(b = a); [感谢Zoran Davidovi?为了这]
- a = a * b /(b = a)[为此感谢kongasricharan]
- a = a ^ b ^(b = a)