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

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