On 5/18/15 10:37 PM, H. S. Teoh via Digitalmars-d wrote:
On Mon, May 18, 2015 at 10:16:47PM -0700, Andrei Alexandrescu via Digitalmars-d 
wrote:
[...]
bool isPowerOf2(uint x)
{
     return (x & (x - 1) | !x) == 0;
}
[...]

Are you sure that's correct? Doesn't that return true for all non-zero
numbers?

Excerpt from std.experimental.allocator.common:

package bool isPowerOf2(uint x)
{
    return (x & (x - 1) | !x) == 0;
}

unittest
{
    assert(!isPowerOf2(0));
    assert(isPowerOf2(1));
    assert(isPowerOf2(2));
    assert(!isPowerOf2(3));
    assert(isPowerOf2(4));
    assert(!isPowerOf2(5));
    assert(!isPowerOf2(6));
    assert(!isPowerOf2(7));
    assert(isPowerOf2(8));
    assert(!isPowerOf2(9));
    assert(!isPowerOf2(10));
}


Andrei

Reply via email to