个性化阅读
专注于IT技术分析

如何在一行中交换两个变量?

本文概述

我们讨论了不同的方法交换两个没有临时变量的整数。如何在不使用库函数的情况下交换一行?

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++

//C/C++ program to swap two variables in single line
#include <stdio.h>
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;
}

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);
    }
}

Python3

# 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

<?php
//PHP program to swap two 
//variables in single line
  
     //Driver Code
     $x = 5;
     $y = 10;
     ( $x ^= $y ); 
     ( $y ^= $x ); 
     ( $x ^= $y ); 
     echo "After Swapping values of x and y are "
                                   , $x , " " , $y ;
  
//This code is contributed by Vishal Tripathi
?>

输出如下:

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]

本文作者:Harshit Gupta。如果你喜欢srcmini并希望做出贡献, 那么你也可以写一篇文章并将你的文章邮寄到contribution@srcmini.org。查看你的文章出现在srcmini主页上, 并帮助其他Geeks。

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请发表评论。

赞(0)
未经允许不得转载:srcmini » 如何在一行中交换两个变量?

评论 抢沙发

评论前必须登录!