Hacker News new | ask | show | jobs
by knome 1331 days 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.