Checking if an Integer is an Exact Binary Power

Solomon E via Digitalmars-d digitalmars-d at puremagic.com
Mon Apr 25 03:42:05 PDT 2016


On Monday, 25 April 2016 at 05:35:12 UTC, Andrei Alexandrescu 
wrote:
>
> With gdc https://godbolt.org/g/jcU4np isPow2B is the winner 
> (shortest code, simplest instructions). -- Andrei

I generalized function isPow2B to work for negative numbers in 
case of a signed type, while keeping the assembly the same or 
better. (That also incidentally made it correctly return false 
for zero.)

>bool isPow2B(T)(T x)
>{
>    return (x & -x) > (x - 1);
>}

bool isPow2F(T)(T x)
{
	return (x & -x) > (x >>> 1);
}

assembly diff:
--        subl    $1, %edi
++        shrl    %edi



More information about the Digitalmars-d mailing list