# Low Level Bit Hacks You Absolutely Must Know

You're viewing a comment by John Doe and its responses.

Dear Peter,

I was not questioning the need for resetting the LSB. There are countless examples for that.

What I WAS saying, however, is that the expression you stated, y = x & (x-1), IS WRONG.

You may have proofread your article, but this is still a mistake. And though I have already shown you two examples in my first post, I will do that again, just so everything's clear:

Example 1:
Let X be 0101010b / 02Ah / 42d.
Let y = x & (x-1):
(0101010 & 0101001) / (02Ah & 029h)
y equals 0101000 / 028h.
Not only was the LSB reset,
but the bit at n=1 as well.

Example 2:
Let X be 10b / 02h / 2d.
Let y = x & (x-1):
(10 & 01) / (02h & 01h)
y equals 00.

The general example, as I already stated in my first post, is that any number ending with the last two bits 10 invalidates the claim, since the result of the expression is that BOTH the last two bits are reset.

As you know, it is sufficient to produce one contradictory example in order to invalidate any rule.

Have a nice day.

### Comment Responses

First to be clear, Peter' claim was to clear the right-most 1 bit, not to be confused with clearing the LSB: (e.g. 0xABCD & 0xFFFE).

So in both of your examples, which you use binary numbers ending in 10b, the result is that the right-most 1 bit (e.g. the n-1 position) is indeed cleared resulting in 00b.

So what's the problem? The original number x ending in 10b already had 0 as its LSB before the operation and post operation it's still 0. The only thing that changes was the right most 1 bit which was in the n-1 position.

This is not a counter-example. Rather, you've just given more examples to support the operation.