# 如何在不使用临时变量的情况下交换两个数字？

2021年4月13日10:20:12 发表评论 806 次浏览

## C++

``````//C++ Program to swap two numbers  without
//using temporary variable
#include <bits/stdc++.h>
using namespace std;

int main()
{
int x = 10, y = 5;

//Code to swap 'x' and 'y'
x = x + y; //x now becomes 15
y = x - y; //y becomes 10
x = x - y; //x becomes 5
cout <<"After Swapping: x =" <<x <<", y=" <<y;
}

//This code is contributed by mohit kumar.``````

## C

``````#include <stdio.h>
int main()
{
int x = 10, y = 5;

//Code to swap 'x' and 'y'
x = x + y; //x now becomes 15
y = x - y; //y becomes 10
x = x - y; //x becomes 5

printf ( "After Swapping: x = %d, y = %d" , x, y);

return 0;
}``````

## Java

``````//Java Program to swap two numbers  without
//using temporary variable
import java.*;

class Geeks {

public static void main(String a[])
{
int x = 10 ;
int y = 5 ;
x = x + y;
y = x - y;
x = x - y;
System.out.println( "After swaping:"
+ " x = " + x + ", y = " + y);
}
}

//This code is contributed by Sam007``````

## Python 3

``````x = 10
y = 5

# Code to swap 'x' and 'y'

# x now becomes 15
x = x + y

# y becomes 10
y = x - y

# x becomes 5
x = x - y
print ( "After Swapping: x =" , x, " y =" , y);

# This code is contributed
# by Sumit Sudhakar``````

## C#

``````//Program to swap two numbers  without
//using temporary variable
using System;

class GFG {
public static void Main()
{
int x = 10;
int y = 5;

x = x + y;
y = x - y;
x = x - y;
Console.WriteLine( "After swapping: x = "
+ x + ", y = " + y);
}
}

//This code is contributed by Sam007``````

## PHP

``````<?php
//PHP Program to swap two
//numbers without using
//temporary variable
\$x = 10; \$y = 5;

//Code to swap 'x' and 'y'
\$x = \$x + \$y ; //x now becomes 15
\$y = \$x - \$y ; //y becomes 10
\$x = \$x - \$y ; //x becomes 5

echo "After Swapping: x = " , \$x , ", " , "y = " , \$y ;

//This code is contributed by m_kit
?>``````

``After Swapping: x = 5, y = 10``

## C++

``````//C++ Program to swap two numbers
//without using temporary variable
#include <bits/stdc++.h>
using namespace std;

int main()
{ //NOTE - for this code to work in a generalised sense, y !- 0 to prevent zero division
int x = 10, y = 5;

//Code to swap 'x' and 'y'
x = x * y; //x now becomes 15
y = x /y; //y becomes 10
x = x /y; //x becomes 5
cout <<"After Swapping: x =" <<x <<", y=" <<y;
}

//This code is contributed by mohit kumar.``````

## C

``````#include <stdio.h>
int main()
{
int x = 10, y = 5;

//Code to swap 'x' and 'y'
x = x * y; //x now becomes 50
y = x /y; //y becomes 10
x = x /y; //x becomes 5

printf ( "After Swapping: x = %d, y = %d" , x, y);

return 0;
}``````

## Java

``````//Java Program to swap two numbers
//without using temporary variable
import java.io.*;

class GFG {
public static void main(String[] args)
{
int x = 10 ;
int y = 5 ;

//Code to swap 'x' and 'y'
x = x * y; //x now becomes 50
y = x /y; //y becomes 10
x = x /y; //x becomes 5

System.out.println( "After swaping:"
+ " x = " + x + ", y = " + y);
}
}

//This code is contributed by ajit``````

## Python3

``````# Python3 program to
# swap two numbers
# without using
# temporary variable
x = 10
y = 5

# code to swap
# 'x' and 'y'

# x now becomes 50
x = x * y

# y becomes 10
y = x //y;

# x becomes 5
x = x //y;

print ( "After Swapping: x =" , x, " y =" , y);

# This code is contributed
# by @ajit``````

## C#

``````//C# Program to swap two
//numbers without using
//temporary variable
using System;

class GFG {
static public void Main()
{
int x = 10;
int y = 5;

//Code to swap 'x' and 'y'
x = x * y; //x now becomes 50
y = x /y; //y becomes 10
x = x /y; //x becomes 5

Console.WriteLine( "After swaping:"
+ " x = " + x + ", y = " + y);
}
}

//This code is contributed by ajit.``````

## PHP

``````<?php
//Driver code
\$x = 10;
\$y = 5;

//Code to swap 'x' and 'y'
\$x = \$x * \$y ; //x now becomes 50
\$y = \$x /\$y ; //y becomes 10
\$x = \$x /\$y ; //x becomes 5

echo "After Swapping: x = " , \$x , " " , "y = " , \$y ;

//This code is contributed by m_kit
?>``````

``After Swapping: x = 5, y = 10``

## C++

``````//C++ code to swap using XOR
#include <bits/stdc++.h>

using namespace std;

int main()
{
int x = 10, y = 5;
//Code to swap 'x' (1010) and 'y' (0101)
x = x ^ y; //x now becomes 15 (1111)
y = x ^ y; //y becomes 10 (1010)
x = x ^ y; //x becomes 5 (0101)
cout <<"After Swapping: x =" <<x <<", y=" <<y;
return 0;
}

//This code is contributed by mohit kumar.``````

## C

``````//C code to swap using XOR
#include <stdio.h>
int main()
{
int x = 10, y = 5;

//Code to swap 'x' (1010) and 'y' (0101)
x = x ^ y; //x now becomes 15 (1111)
y = x ^ y; //y becomes 10 (1010)
x = x ^ y; //x becomes 5 (0101)

printf ( "After Swapping: x = %d, y = %d" , x, y);

return 0;
}``````

## Java

``````//Java code to swap using XOR
import java.*;

public class GFG {

public static void main(String a[])
{
int x = 10 ;
int y = 5 ;

//Code to swap 'x' (1010) and 'y' (0101)
x = x ^ y; //x now becomes 15 (1111)
y = x ^ y; //y becomes 10 (1010)
x = x ^ y; //x becomes 5 (0101)

System.out.println( "After swap: x = "
+ x + ", y = " + y);
}
}

//This code is contributed by Sam007.``````

## Python3

``````# Python 3 code to swap using XOR

x = 10
y = 5

# Code to swap 'x' and 'y'
x = x ^ y; # x now becomes 15 (1111)
y = x ^ y; # y becomes 10 (1010)
x = x ^ y; # x becomes 5 (0101)

print ( "After Swapping: x = " , x, " y =" , y)

# This code is contributed by
# Sumit Sudhakar``````

## C#

``````//C# program to swap using XOR
using System;

class GFG {
public static void Main()
{
int x = 10;
int y = 5;

//Code to swap 'x' (1010)
//and 'y' (0101)

//x now becomes 15 (1111)
x = x ^ y;

//y becomes 10 (1010)
y = x ^ y;

//x becomes 5 (0101)
x = x ^ y;

Console.WriteLine( "After swap: x = " + x + ", y = " + y);
}
}

//This code is contributed by ajit``````

## PHP

``````<?php

//Driver Code
\$x = 10;
\$y = 5;

//Code to swap 'x' (1010)
//and 'y' (0101)

//x now becomes 15 (1111)
\$x = \$x ^ \$y ;

//y becomes 10 (1010)
\$y = \$x ^ \$y ;

//x becomes 5 (0101)
\$x = \$x ^ \$y ;

echo "After Swapping: x = " , \$x , ", " , "y = " , \$y ;

//This code is contributed by aj_36
?>``````

``After Swapping: x = 5, y = 10``

1)

2)

3)

//基于位异或的方法

x = x ^ x; // x变为0

x = x ^ x; // x保持为0

x = x ^ x; // x保持为0

//基于算术的方法

x = x + x; // x变成2x

x = x – x; // x变为0

x = x – x; // x保持为0

## C++

``````#include <bits/stdc++.h>
using namespace std;
void swap( int * xp, int * yp)
{
*xp = *xp ^ *yp;
*yp = *xp ^ *yp;
*xp = *xp ^ *yp;
}

//Driver code
int main()
{
int x = 10;
swap(&x, &x);
cout<<"After swap(&x, &x): x = " <<x;
return 0;
}

//This code is contributed by rathbhupendra``````

## C

``````#include <stdio.h>
void swap( int * xp, int * yp)
{
*xp = *xp ^ *yp;
*yp = *xp ^ *yp;
*xp = *xp ^ *yp;
}

int main()
{
int x = 10;
swap(&x, &x);
printf ( "After swap(&x, &x): x = %d" , x);
return 0;
}``````

## Java

``````class GFG
{
static void swap( int [] xp, int [] yp)
{
xp[ 0 ] = xp[ 0 ] ^ yp[ 0 ];
yp[ 0 ] = xp[ 0 ] ^ yp[ 0 ];
xp[ 0 ] = xp[ 0 ] ^ yp[ 0 ];
}

//Driver code
public static void main(String[] args)
{
int [] x = { 10 };
swap(x, x);
System.out.println( "After swap(&x, &x): x = " + x[ 0 ]);
}
}

//This code is contributed by Rajput-Ji``````

## Python3

``````def swap(xp, yp):

xp[ 0 ] = xp[ 0 ] ^ yp[ 0 ]
yp[ 0 ] = xp[ 0 ] ^ yp[ 0 ]
xp[ 0 ] = xp[ 0 ] ^ yp[ 0 ]

# Driver code
x = [ 10 ]
swap(x, x)
print ( "After swap(&x, &x): x = " , x[ 0 ])

# This code is contributed by SHUBHAMSINGH10``````

## PHP

``````<?php
function swap(& \$xp , & \$yp )
{
\$xp = \$xp ^ \$yp ;
\$yp = \$xp ^ \$yp ;
\$xp = \$xp ^ \$yp ;
}

//Driver Code
\$x = 10;
swap( \$x , \$x );
print ( "After swap(&x, &x): x = " . \$x );

//This code is contributed
//by chandan_jnu
?>``````

``After swap(&x, &x): x = 0``

## C++

``````#include <bits/stdc++.h>
using namespace std;
void swap( int * xp, int * yp)
{

//Check if the two addresses are same
if (xp == yp)
return ;
*xp = *xp + *yp;
*yp = *xp - *yp;
*xp = *xp - *yp;
}

//Driver Code
int main()
{
int x = 10;
swap(&x, &x);
cout <<"After swap(&x, &x): x = " <<x;
return 0;
}

//This code is contributed by rathbhupendra``````

## C

``````#include <stdio.h>
void swap( int * xp, int * yp)
{
if (xp == yp) //Check if the two addresses are same
return ;
*xp = *xp + *yp;
*yp = *xp - *yp;
*xp = *xp - *yp;
}
int main()
{
int x = 10;
swap(&x, &x);
printf ( "After swap(&x, &x): x = %d" , x);
return 0;
}``````

## Java

``````//Java program of above approach
class GFG {

static void swap( int xp, int yp)
{
if (xp == yp) //Check if the two addresses are same
return ;
xp = xp + yp;
yp = xp - yp;
xp = xp - yp;
}

//Driver code
public static void main(String[] args)
{
int x = 10 ;
swap(x, x);
System.out.println( "After swap(&x, &x): x = " + x);
}
}

//This code is Contributed by Code_Mech.``````

## Python3

``````# Python3 program of above approach
def swap(xp, yp):

# Check if the two addresses are same
if (xp[ 0 ] = = yp[ 0 ]):
return
xp[ 0 ] = xp[ 0 ] + yp[ 0 ]
yp[ 0 ] = xp[ 0 ] - yp[ 0 ]
xp[ 0 ] = xp[ 0 ] - yp[ 0 ]

# Driver Code
x = [ 10 ]
swap(x, x)
print ( "After swap(&x, &x): x = " , x[ 0 ])

# This code is contributed by SHUBHAMSINGH10``````

## C#

``````//C# program of above approach
using System;
class GFG {

static void swap( int xp, int yp)
{
if (xp == yp) //Check if the two addresses are same
return ;
xp = xp + yp;
yp = xp - yp;
xp = xp - yp;
}

//Driver code
public static void Main()
{
int x = 10;
swap(x, x);
Console.WriteLine( "After swap(&x, &x): x = " + x);
}
}

//This code is Contributed by Code_Mech.``````

## PHP

``````<?php
function swap( \$xp , \$yp )
{
//are same
if ( \$xp == \$yp )
return ;
\$xp = \$xp + \$yp ;
\$yp = \$xp - \$yp ;
\$xp = \$xp - \$yp ;
}

//Driver Code
\$x = 10;
swap( \$x , \$x );
echo ( "After swap(&x, &x): x = " . \$x );
return 0;

//This code is contributed
//by Code_Mech.``````

``After swap(&x, &x): x = 10``

## C++

``````//C++ program to swap two numbers.
#include<bits/stdc++.h>
using namespace std;

//Function to swap the numbers.
void swap( int &a, int &b)
{
//same as a = a + b
a = (a & b) + (a | b);

//same as b = a - b
b = a ^ b;

//same as a = a - b
a = a + (~b) + 1;
}

//Driver Code
int main()
{
int a = 5, b = 10;

//Function Call
swap(a, b);

cout <<"After swapping: a = " <<a <<
", b = " <<b;

return 0;
}

//This code is contributed by yashbeersingh42``````

``After swapping: a = 10, b = 5`` 