5.22 · exercise
Power of two, or not?
A power of two (1, 2, 4, 8, and so on) has exactly one bit set. Subtracting 1 clears that bit and sets every bit below it, so n and n - 1 share no set bits and n & (n - 1) is zero. Any other positive number keeps its highest set bit through the subtraction, so the AND is not zero.
The starter reads a 64-bit number into n_r and always prints that it is not a power of two. Point x0 at fmt_yes instead when n_r is a power of two: compute n - 1 in a spare register and test the two with tst, which sets the flags from their AND.
Watch zero and the negative numbers: the bit test alone gets one of each wrong.
What is checked
64 is a power of twofor the sample input- the program exits cleanly
- the bits are tested with
tst - the right answer for other numbers, including 0, 1, a number wider than 32 bits, and negative numbers
specification
stdin64
stdoutprints the right output
exitexits with the right code
sourceuses
tsthiddenright output and exit code on 7 more inputs you do not see
We run your program on the input above and on the hidden ones, and compare what it does. Nothing is matched against a stored solution.