IsPowerOfTwo This function uses the fact that powers of 2 are represented like 10...0 in binary, and numbers one less than the power of 2 are represented like 11...1. Therefore, using the and function: 10...0 & 01...1 00...0 -> 0 This is also true for 0, which is not a power of 2, for which
(x int)
| 21 | // This is also true for 0, which is not a power of 2, for which we |
| 22 | // have to add and extra condition. |
| 23 | func IsPowerOfTwo(x int) bool { |
| 24 | return x > 0 && (x&(x-1)) == 0 |
| 25 | } |
| 26 | |
| 27 | // IsPowerOfTwoLeftShift This function takes advantage of the fact that left shifting a number |
| 28 | // by 1 is equivalent to multiplying by 2. For example, binary 00000001 when shifted by 3 becomes 00001000, |
no outgoing calls