# Swap bits in an integer

Question 33. Given an integer, swap the bit at position 1 with the bit at position 2

We first extract the bits at position 1 and position 2. We then have to swap the two bits only if the two bits are different. The code for swapping the bits is given below

## C/C++

```
/*
x: integer in which the bits should be swapped
pos1: position of first bit to be swapped
pos2: position of the second bit to be swapped
*/
unsigned int swap_bits(unsigned int x, int pos1, int pos2)
{
/*get the bits at position pos1 and pos2*/
int bit1 = (x >> pos1) & 1;
int bit2 = (x >> pos2) & 1;

/*swap the bits if the bits are different*/
if (bit1 != bit2) {
x = write_bit(x, bit1, pos2);
x = write_bit(x, bit2, pos1);
}

return x;
}

/*writes the bit_value (0/1) into position pos in x and returns the result*/
unsigned int write_bit(unsigned int x, int bit_value, int pos)
{
unsigned int mask = 1 << pos;
if (bit_value)
else

return x;
}

```

## Java

```
/*
x: integer in which the bits should be swapped
pos1: position of first bit to be swapped
pos2: position of the second bit to be swapped
*/
public static int swapBits(int x, int pos1, int pos2) {
/*get the bits at position pos1 and pos2*/
int bit1 = (x >> pos1) & 1;
int bit2 = (x >> pos2) & 1;

/*swap the bits*/
if (bit1 != bit2) {
x = writeBit(x, bit1, pos2);
x = writeBit(x, bit2, pos1);
}

return x;
}

/*writes the bitValue (0/1) into position pos in x and returns the result*/
public static int writeBit( int x, int bitValue, int pos)  {
int mask = 1 << pos;
if (bitValue == 1)
else

return x;
}

```

## Python

```
#writes the bit_value (0/1) into position pos in x and returns the result
def write_bit(x, bit_value, pos):
if (bit_value == 1):
else:

return x

#x: integer in which the bits should be swapped
#pos1: position of first bit to be swapped
#pos2: position of the second bit to be swapped
def swap_bits(x, pos1, pos2):
#get the bits at position pos1 and pos2
bit1 = (x >> pos1) & 1
bit2 = (x >> pos2) & 1

#swap the bits
if (bit1 != bit2) :
x = write_bit(x, bit1, pos2)
x = write_bit(x, bit2, pos1)

return x

```