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

Recommended Posts:

Writing code in comment? Please use ide.geeksforgeeks.org, generate link and share the link here.