Query about working out whether number is a power of 2
algorithm
Solution
You need refresh yourself on how binary works. 5 is not represented as 0001 1111 (5 bits on), it's represented as 0000 0101 (2^2 + 2^0), and 4 is likewise not 0000 1111 (4 bits on) but rather 0000 0100 (2^2). The numbers you wrote are actually in unary.
Wikipedia, as usual, has a pretty thorough overview.
Problem
Using the classic code snippet: if (x & (x-1)) == 0 If the answer is 1, then it is false and not a power of 2. However, working on 5 (not a power of 2) and 4 results in: 0001 1111 0001 1111 0000 1111 That's 4 1s. Working on 8 and 7: 1111 1111 0111 1111 0111 1111 The 0 is first, but we have 4. In this link (http://www.exploringbinary.com/ten-ways-to-check-if-an-integer-is-a-power-of-two-in-c/) for both cases, the answer starts with 0 and there is a variable number of 0s/1s. How does this answer whether the number is a power of 2?