To check whether a number is a power of 2
int
isPowerOfTwo(unsigned n)
{
return
n && (! (n & (n-1)) );
}
How it works:
If we subtract a power of 2 numbers by 1 then all unset bits after the only set bit become set; and the set bit become unset.
For example for 4 ( 100) and 16(10000), we get following after subtracting 1
3 –> 011
15 –> 01111
n & (n-1) will be 0
!(n & (n-1)) will be 1 in power of 2 case else 0
logical and with the number will give the result.
Why we need to do logical and with the number ???
n && (! (n & (n-1)) )
Ans: To handle the case n=0
Guys are u OK with this method
There are some other methods which will be interesting
Example: power of 2 numbers will be having only one bit set.
Just we need to count the number of 1s.
In interview if u were asked to check whether "00100000" is a power of 2 then you can straight away tell the answer yes.
No comments:
Post a Comment