I made a short program which checks if a number is a power of 2 without using any loops. The idea: A number which is a power of 2 must have only one bit "1" ( ex: 8= 1000, 4=100 and so on). Suppose we have a power of 2:nr = 10...000 (in binary), if we subtract 1 we will get something like this:nr-1= 01...111. Now, if we do nr&(nr-1) we should always get 0 if the nr is a power of 2 and some random number if it isn't. What other solutions are there for this problem?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int nr;
scanf("%d",&nr);
if((nr&(nr-1))==0)
{
printf("\n%d is a power of 2",nr);
}
else
{
printf("\n%d is not a power of 2",nr);
}
return 0;
}
return ++popcnt(nr)==1;
is all you need. \$\endgroup\$