3 ms·
Missing a 'not'. You would use `bool( nn and not (nn&(nn-1)) )` Let's try for 15 start 0b1111 sans1 0b1110 anded 0b1110 not 0b0000 No
by knome 4y ago
Missing a 'not'.
You would use `bool( nn and not (nn&(nn-1)) )`
Let's try for 15
start 0b1111
sans1 0b1110
anded 0b1110
not 0b0000
Now 8
start 0b1000
sans1 0b0111
anded 0b0000
not 0b0001
It's basically a claim that, in binary, only powers of two won't have any overlapping bits between the initial number and that number minus one.
Doesn't work for 0 so you have to special case it.