noname001
Messages postés21Date d'inscriptiondimanche 15 novembre 2009StatutMembreDernière intervention 1 mai 2010
-
10 mars 2010 à 15:49
cs_louis14
Messages postés793Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention10 février 2021
-
12 mars 2010 à 08:42
Bonjour à tous,
Existe-il une fonction qui renverrait une valeur ou une bool indiquant qu'un nombre est une puissance de 2 ?
Merci d'avance
(Ps : je pourrais évidemment le faire moi-même mais ça alourdirait mon code)
cs_louis14
Messages postés793Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention10 février 20218 11 mars 2010 à 09:13
Bonjour,
Je pense qu'il n'y a pas de fonction toute faite Mais j'avais utilisé ça : pour tout x > 0 x est une puissance de 2 si (x & (x − 1)) = 0
à utiliser pour ta fonction.
D'autres indications à cette adresse :
http://en.wikipedia.org/wiki/Power_of_two En espérant que cela t'aidera.
louis
noname001
Messages postés21Date d'inscriptiondimanche 15 novembre 2009StatutMembreDernière intervention 1 mai 2010 11 mars 2010 à 21:27
Effectivement, cette technique marche parfaitement louis et avec un minimum de complexité.
Je ne saisi pas comment ce code permet de déterminer si un nombre est oui ou non une puissance de deux , malgré le lecture du lien wiki.
Pourrais-tu m'éclairer ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 11 mars 2010 à 21:34
Fonctionne pour TOUT nbr de 32 bits:
// int __fastcall bnIsDwPowTwo(DWORD n)
bnIsDwPowTwo PROC
xor eax, eax
bsr edx, ecx
je short ispowEXIT
bsf eax, ecx
cmp eax, edx
sete al
ispowEXIT:
ret 0
bnIsDwPowTwo ENDP
cs_louis14
Messages postés793Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention10 février 20218 12 mars 2010 à 08:42
Il faut étudier la représentation binaire des puissances de 2 ( 1 et x fois 0) et tout autre nombre. Le moins 1 décale d'une position à gauche et ensuite un ET logique.
J'espère t'avoir aider.