Puissance 2 en C++

redred -  
 jk -
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
Configuration: Windows XP
Firefox 2.0.0.14
gcc 3.4.5

8 réponses

  1. jk
     
    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