|
Is power of two |
|
| Code |
01: bool isPowerOfTwo(unsigned int x)
bits.stephan-brumme.com
|
| Explanation |
The binary representation of a power-of-two 2y is a 1 followed only by 0s. In such a case, x − 1 generates a binary number where the 1s turn into 0s and the former 0s turn into 1s. For example, 8 = 1000b and 8 − 1 = 7 = 0111b. If x and x − 1 are binary ANDed then the result is only 0 if x is a power of two (line 3). |
| Restrictions |
• the algorithm returns true for x = 0 and x = 1, i.e. they are considered to be a power of two |
|
These ads help me to pay my server bills |
|
| Performance |
• constant time, data independent + Intel® Pentium™ D: • isPowerOfTwo/VC: ≈ 5.5 cycles per number • isPowerOfTwo/GCC: ≈ 11 cycles per number + Intel® Core™ 2: • isPowerOfTwo/VC: ≈ 2.25 cycles per number • isPowerOfTwo/GCC: ≈ 4 cycles per number + Intel® Core™ i7: • isPowerOfTwo/VC: ≈ 2.25 cycles per number • isPowerOfTwo/GCC: ≈ 4 cycles per number CPU cycles (full optimization, lower values are better) |
| Assembler Output | |
| Download | The full source code including a test program is available for download. |
| References |
http://graphics.stanford.edu/~seander/bithacks.html |
| More Twiddled Bits |
... or go to the index |