# 如何交换给定整数中的两位？

2021年3月13日15:46:48 发表评论 806 次浏览

## 本文概述

``````Input: n = 28, p1 = 0, p2 = 3
Output: 21
28 in binary is 11100.  If we swap 0'th and 3rd digits, we get 10101 which is 21 in decimal.

Input: n = 20, p1 = 2, p2 = 3
Output: 24``````

, 即要交换两个数字" x"和" y", 我们执行x = x ^ y, y = y ^ x和x = x ^ y。

## C ++

``````// C program to swap bits in an integer
#include<stdio.h>

// This function swaps bit at positions p1 and p2 in an integer n
int swapBits(unsigned int n, unsigned int p1, unsigned int p2)
{
/* Move p1'th to rightmost side */
unsigned int bit1 =  (n >> p1) & 1;

/* Move p2'th to rightmost side */
unsigned int bit2 =  (n >> p2) & 1;

/* XOR the two bits */
unsigned int x = (bit1 ^ bit2);

/* Put the xor bit back to their original positions */
x = (x << p1) | (x << p2);

/* XOR 'x' with the original number so that the
two sets are swapped */
unsigned int result = n ^ x;
}

/* Driver program to test above function*/
int main()
{
int res =  swapBits(28, 0, 3);
printf ( "Result = %d " , res);
return 0;
}``````

## Java

``````// Java program to swap bits in an integer
import java.io.*;

class GFG
{

// This function swaps bit at
// positions p1 and p2 in an integer n
static int swapBits( int n, int p1, int p2)
{
/* Move p1'th to rightmost side */
int bit1 = (n >> p1) & 1 ;

/* Move p2'th to rightmost side */
int bit2 = (n >> p2) & 1 ;

/* XOR the two bits */
int x = (bit1 ^ bit2);

/* Put the xor bit back to
their original positions */
x = (x << p1) | (x << p2);

/* XOR 'x' with the original
number so that the
two sets are swapped */
int result = n ^ x;
return result;
}

/* Driver code*/
public static void main (String[] args)
{
int res = swapBits( 28 , 0 , 3 );
System.out.println ( "Result = " + res);
}
}

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

## Python3

``````# Python3 program to swap bits in an integer

# This function swaps bit at positions
# p1 and p2 in an integer n
def swapBits(n, p1, p2):

''' Move p1'th to rightmost side '''
bit1 = (n >> p1) & 1

''' Move p2'th to rightmost side '''
bit2 = (n >> p2) & 1

''' XOR the two bits '''
x = (bit1 ^ bit2)

''' Put the xor bit back to their
original positions '''
x = (x << p1) | (x << p2)

''' XOR 'x' with the original number
so that thetwo sets are swapped '''
result = n ^ x
return result

# Driver Code
res = swapBits( 28 , 0 , 3 )
print ( "Result =" , res)

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

## C#

``````// C# program to swap bits in an integer
using System;

class GFG
{

// This function swaps bit at positions
// p1 and p2 in an integer n
static int swapBits( int n, int p1, int p2)
{
/* Move p1'th to rightmost side */
int bit1 = (n >> p1) & 1;

/* Move p2'th to rightmost side */
int bit2 = (n >> p2) & 1;

/* XOR the two bits */
int x = (bit1 ^ bit2);

/* Put the xor bit back to
their original positions */
x = (x << p1) | (x << p2);

/* XOR 'x' with the original
number so that the
two sets are swapped */
int result = n ^ x;
return result;
}

/* Driver code*/
static public void Main ()
{
int res = swapBits(28, 0, 3);
Console.WriteLine( "Result = " + res);
}
}

// This code is contributed by akt_mit``````

``Result = 21``

(num = num ^(1 << bit_position))

.

## C ++

``````//C++ code for swapping given bits of a number
#include<iostream>
using namespace std;
int swapBits( int n, int p1, int p2)
{
//left-shift 1 p1 and p2 times
//and using XOR
n ^= 1 << p1;
n ^= 1 << p2;
return n;
}

//Driver Code
int main()
{
cout << "Result = " << swapBits(28, 0, 3);
return 0;
}

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

## C

``````//C code for swapping given bits of a number
#include<stdio.h>
int swapBits( int n, int p1, int p2)
{
//left-shift 1 p1 and p2 times
//and using XOR
n ^= 1 << p1;
n ^= 1 << p2;
return n;
}

//Driver Code
int main()
{
printf ( "Result = %d" , swapBits(28, 0, 3));
return 0;
}

//This code is contributed by yashbeersingh42``````
``````Output:
Result = 21``````