# 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
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 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` `    ``// Besides this, we can calculate num as: num=(1<

## 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` `        ``// 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 range` `using` `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<

## PHP

 ``

## 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 range` `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` `int` `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 range` `import` `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 range` `def` `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 code` `n ``=` `50` `l ``=` `2` `r ``=` `5` `print``(toggleBitsFromLToR(n, l, r))`   `# This code is contributed by phasing17`

## C#

 `// C# implementation to toggle bits in` `// the given range` `using` `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 range` `function` `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 code` `let 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)

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.