# Toggle bits in the given range

Given a non-negative number n and two values l and r. The problem is to toggle the bits in the range l to r in the binary representation of n, i.e, to toggle bits from the rightmost lth bit to the rightmost rth bit. A toggle operation flips a bit 0 to 1 and a bit 1 to 0.

Constraint: 1 <= l <= r <= number of bits in the binary representation of n.

Examples:

```Input : n = 17, l = 2, r = 3
Output : 23
(17)10 = (10001)2
(23)10 = (10111)2
The bits in the range 2 to 3 in the binary
representation of 17 are toggled.

Input : n = 50, l = 2, r = 5
Output : 44
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: Following are the steps:

1. Calculate num = ((1 << r) – 1) ^ ((1 << (l-1)) – 1). This will produce a number num having r number of bits and bits in the range l to r are the only set bits.
2. Now, perform n = n ^ num. This will toggle the bits in the range l to r in n.

## C/C++

```// C++ implementation to toggle bits in
// the given range
#include <bits/stdc++.h>
using namespace std;

// function to toggle bits in the given range
unsigned int toggleBitsFromLToR(unsigned int n,
unsigned int l, unsigned int r)
{
// calculating a number 'num' having 'r'
// number of bits and bits in the range l
// to r are the only set bits
int num = ((1 << r) - 1) ^ ((1 << (l - 1)) - 1);

// toggle bits in the range l to r in 'n'
// and return the number
return (n ^ num);
}

// Driver program to test above
int main()
{
unsigned int n = 50;
unsigned int l = 2, r = 5;
cout << toggleBitsFromLToR(n, l, r);
return 0;
}
```

## Java

```// Java implementation to toggle bits in
// the given range
import java.io.*;

class GFG
{
// Function to toggle bits in the given range
static int toggleBitsFromLToR(int n, int l, int r)
{
// calculating a number 'num' having 'r'
// number of bits and bits in the range l
// to r are the only set bits
int num = ((1 << r) - 1) ^ ((1 << (l - 1)) - 1);

// toggle bits in the range l to r in 'n'
// and return the number
return (n ^ num);
}

// driver program
public static void main (String[] args)
{
int n = 50;
int l = 2, r = 5;
System.out.println(toggleBitsFromLToR(n, l, r));
}
}

// Contributed by Pramod Kumar
```

Output:

```44
```

This article is contributed by Ayush Jauhari. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

# GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.
2.7 Average Difficulty : 2.7/5.0
Based on 12 vote(s)