Turn off the rightmost set bit


Write a C function that unsets the rightmost set bit of an integer.


Input:  12 (00...01100)
Output: 8 (00...01000)

Input:  7 (00...00111)
Output: 6 (00...00110)

Let the input number be n. n-1 would have all the bits flipped after the rightmost set bit (including the set bit). So, doing n&(n-1) would give us the required result.


/* unsets the rightmost set bit of n and returns the result */
int fun(unsigned int n)
  return n&(n-1);

/* Driver program to test above function */
int main()
  int n = 7;
  printf("The number after unsetting the rightmost set bit %d", fun(n));

  return 0;

Please write comments if you find the above code/algorithm incorrect, or find better ways to solve the same problem

GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.

Recommended Posts:

2.6 Average Difficulty : 2.6/5.0
Based on 40 vote(s)