# Toggle bits in the given range

• Difficulty Level : Medium
• Last Updated : 08 Aug, 2022

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
Explanation: (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 Practice

Approach: Following are the steps:

1. Calculate num as = ((1 << r) – 1) ^ ((1 << (l-1)) – 1) or as ((1 <<r)-l). 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++ implementation to toggle bits in// the given range#include using namespace std; // function to toggle bits in the given rangeunsigned 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    // Besides this, we can calculate num as: num=(1<

## Java

 // Java implementation to toggle bits in// the given rangeimport 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        // Besides this, we can calculate num as:        // num=(1<

## Python3

 # Python implementation# to toggle bits in# the given range # function to toggle bits# in the given range  def toggleBitsFromLToR(n, l, r):     # calculating a number    # 'num' having 'r'    # number of bits and    # bits in the range l    # to r are the only set bits    num = ((1 << r) - 1) ^ ((1 << (l - 1)) - 1)     # toggle bits in the    # range l to r in 'n'    # Besides this, we can calculate num as: num=(1<

## C#

 // C# implementation to toggle bits// in the given rangeusing System; namespace Toggle {public 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'        // Besides this, we can calculate num as:        // num=(1<



## Javascript



Output

44

Time Complexity: O(1)
Auxiliary Space: O(1)

Approach 2:
Iterate over the given range from L to R and check if the ith bit is set or not. if the ith bit is set then make it unset otherwise make it set bit.

## C++

 // C++ implementation to toggle bits in// the given range#include  using namespace std; // Function to toggle bits in the given rangeint toggleBitsFromLToR(int N, int L, int R){    int res = N;    for (int i = L; i <= R; i++) {         // Set bit        if ((N & (1 << (i - 1))) != 0) {             // XOR will set 0 to already set            // bits(a^a=0)            res = res ^ (1 << (i - 1));        }         // unset bits        else {            // OR will set'0'bits to 1            res = res | (1 << (i - 1));        }    }    return res;} // Driver codeint main(){    int n = 50;    int l = 2, r = 5;    cout << toggleBitsFromLToR(n, l, r);     return 0;} // This code is contributed by phasing17

## Java

 // Java implementation to toggle bits in// the given rangeimport java.io.*; class GFG {     // Function to toggle bits in the given range    static int toggleBitsFromLToR(int N, int L, int R)    {        int res = N;        for (int i = L; i <= R; i++) {             // Set bit            if ((N & (1 << (i - 1))) != 0) {                 // XOR will set 0 to already set                // bits(a^a=0)                res = res ^ (1 << (i - 1));            }             // unset bits            else {                // OR will set'0'bits to 1                res = res | (1 << (i - 1));            }        }        return res;    }     // Driver method    public static void main(String[] args)    {        int n = 50;        int l = 2, r = 5;        System.out.println(toggleBitsFromLToR(n, l, r));    }} // Contributed by Ocean Bhardwaj

## Python3

 # Python3 implementation to toggle bits in# the given range # Function to toggle bits in the given rangedef toggleBitsFromLToR(N, L, R):     res = N    for i in range(L, R + 1):         # Set bit        if ((N & (1 << (i - 1))) != 0):             # XOR will set 0 to already set            # bits(a^a=0)            res = res ^ (1 << (i - 1))         # unset bits        else:            # OR will set'0'bits to 1            res = res | (1 << (i - 1))     return res # Driver coden = 50l = 2r = 5print(toggleBitsFromLToR(n, l, r)) # This code is contributed by phasing17

## C#

 // C# implementation to toggle bits in// the given rangeusing System; class GFG {   // Function to toggle bits in the given range  static int toggleBitsFromLToR(int N, int L, int R)  {    int res = N;    for (int i = L; i <= R; i++) {       // Set bit      if ((N & (1 << (i - 1))) != 0) {         // XOR will set 0 to already set        // bits(a^a=0)        res = res ^ (1 << (i - 1));      }       // unset bits      else {        // OR will set'0'bits to 1        res = res | (1 << (i - 1));      }    }    return res;  }   // Driver Code  public static void Main(string[] args)  {    int n = 50;    int l = 2, r = 5;     // Function call    Console.WriteLine(toggleBitsFromLToR(n, l, r));  }} // This code is Contributed by phasing17

## Javascript

 // JavaScript implementation to toggle bits in// the given range // Function to toggle bits in the given rangefunction toggleBitsFromLToR(N, L, R){    let res = N;    for (let i = L; i <= R; i++) {         // Set bit        if ((N & (1 << (i - 1))) != 0) {             // XOR will set 0 to already set            // bits(a^a=0)            res = res ^ (1 << (i - 1));        }         // unset bits        else {            // OR will set'0'bits to 1            res = res | (1 << (i - 1));        }    }    return res;}  // Driver codelet n = 50;let l = 2, r = 5;console.log(toggleBitsFromLToR(n, l, r));   // This code is contributed by phasing17

Output

44

Time Complexity: O(R – L + 1)
Auxiliary Space: O(1)

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