Puissance 2 en C++

Fermé
redred - 30 juin 2008 à 21:51
 jk - 8 juin 2010 à 16:15
Bonjour,
comment savoir si un entier est une puissance de 2 avec C++, sans faire de boucle, juste avec les opérateurs:
+ - * / % et manipulation de bit ~ ^ | & >> << ...
merci de votre aide

8 réponses

Résumé :
if( ((x&(x-1)) != 0) || (x == 0) )
            //pas puissance de deux
else
            //puissance de deux


Ou bien :

if(   (((x & -x) xor x) == 0)  &&  (x != 0)    ){
            //x est puissance de 2
}else{
            //x n'est pas puissance de 2
} 


Ou encore :

if( ((x ^ (x-1)) == x+(x-1)) && (x != 0) )
printf("x puissance de 2");


Le tout testé jusqu'à 2^13
9