Toggle bits in the given range

05 Jul, 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 = 3Output: 23Explaination: (17)10 = (10001)2                       (23)10 = (10111)2The bits in the range 2 to 3 in the binary representation of 17 are toggled.
Input: n = 50, l = 2, r = 5Output: 44
Approach: Following are the steps:
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.Now, perform n = n ^ num. This will toggle the bits in the range l to r in n.
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.
Now, perform n = n ^ num. This will toggle the bits in the range l to r in n.
C++
Java
Python3
C#
PHP
Javascript
// C++ implementation to toggle bits in// the given range#include <bits/stdc++.h>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<<r)-l .    return (n ^ num);} // Driver program to test aboveint main(){    unsigned int n = 50;    unsigned int l = 2, r = 5;    cout << toggleBitsFromLToR(n, l, r);    return 0;}
// 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<<r)-l .        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
# 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<<r)-l .     # and return the number    return (n ^ num) # Driver code  n = 50l = 2r = 5 print(toggleBitsFromLToR(n, l, r)) # This code is contributed# by Anant Agarwal.
// 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<<r)-l .        // and return the number        return (n ^ num);    }     // Driver Code    public static void Main()    {        int n = 50;        int l = 2, r = 5;        Console.Write(toggleBitsFromLToR(n, l, r));    }}} // This code is contributed by Sam007.
<?php// PHP implementation// to toggle bits in// the given range // function to toggle bits// in the given rangefunction 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<<$r)-$l .    // and return the number     return ($n ^ $num);}     // Driver Code    $n = 50;    $l = 2; $r = 5;    echo toggleBitsFromLToR($n, $l, $r); // This code is contributed by anuj_67?>
<script> // Javascript implementation to toggle bits in// the given range // function to toggle bits in the given rangefunction 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    var 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<<r)-l .    return (n ^ num);} // Driver program to test abovevar n = 50;var l = 2, r = 5;document.write( toggleBitsFromLToR(n, l, r)); </script>
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++
Java
C#
Javascript
// C++ implementation to toggle bits in// the given range#include <bits/stdc++.h> 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 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
// 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 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
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.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
vt_m
rajat_kumar
noob2000
harendrakumar123
phasing17
Bit Magic
Bit Magic
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Set, Clear and Toggle a given bit of a number in C
Find two numbers from their sum and XOR
Find a number X such that (X XOR A) is minimum and the count of set bits in X and B are equal
Equal Sum and XOR of three Numbers
Builtin functions of GCC compiler
Calculate XOR from 1 to n.
Calculate square of a number without using *, / and pow()
Reverse actual bits of the given number
Find XOR of two number without using XOR operator
Unique element in an array where all elements occur k times except one