Jun 122012

How will you turn off the rightmost bit in the binary representation of an unsigned int number.


We have to turn off the right most bit in binary representation of a number. For example

Input:  18 (00…010010)
Output: 16 (00…010000)
Input:  15 (00…001111)
Output: 14 (00…001110)

The solution uses the fact that in the binary representation of (n-1)  all bits from right till x will be toggled, where x is the rightmost set bit in binary representation of n. For example:

n   = 18 (00…010010)
n-1 = 17 (00…010001)
n   = 15 (00…001111)
n-1 = 14 (00…001110)
n   = 8 (00…001000)
n-1 = 7 (00…000111)

If we want to turn off the rightmost set bit, then we just need to do a bit-wise AND of n & n-1.

    unsigned int turnOffRightMostSetBit(unsigned int n)
        return n&(n-1);

  2 Responses to “Turn off the rightmost bit of an integer”

Comments (2)
  1. hi…
    your code works perfectly only for values where n>2,
    am i right…

    • No.. It should work for all positive values of n.

      if n == 2 (000…010)
      then n & (n-1) will be (000…010) & (000…001) = 000…000 (hence unset the rightmost bit.

      Similarly if n is one then also it will unset the rightmost bit (the only set bit).

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>