Trouver la puissance de 2 dans un nombre quelconque

Bonjour,

Comment trouver la puissance de 2 comprise dans un nombre (ex: Pour 80 ce serait 4), tout cela avec une formule dans une seule cellule

Merci

Bonjour MoiToukoul et bienvenue sur XLP ,

Pourrais-tu expliquer pourquoi 4 est la puissance de 2 comprise dans 80 ?

edit : c'est la puissance de 2 dans la décomposition de 80 en facteurs premiers (2 * 2 * 2 * 2 * 5)

Re,

Si le nombre est dans la cellule A1, essayez la formule matricielle suivante :

=SOMME(1*(MOD(A1/PUISSANCE(2;LIGNE($1:$20));1)=0))

image

nota : augmenter la valeur 20 dans l'expression $1:$20 si la puissance de 2 peut être supérieure à 20 (sans toutefois dépasser 49)

Bonsoir,

De ce que j'ai compris, il veut la puissance de 2 égale ou inférieure.
Par exemple 80 est compris entre 64 et 128. (2¨6 et 2¨7), donc pour moi, c'est 6 et non 4.

Si j'ai bien compris, le log en base 2 fera l'affaire :

=ENT(LOG(A1;2))

Si ce n'est pas ça, explicite mieux ta demande.

A+

Oups, je n'avais pas lu la réponse de mafraise. Effectivement, cela explique le résultat 4.

En voila un bon résultat, super site et grand merci; je garde cette bonne adresse

Pour info, dans le cas du diviseur 2 spécifiquement, on pourrait utiliser une propriété intéressante des nombres binaires : la puissance de 2 divisant le nombre est directement égale au nombre de trailing zeroes (les zéros à la fin) dans sa représentation binaire.

Pour rappel, =DECBIN(A1) permet de récupérer l'expression binaire du nombre.

Par exemple :

80 = 1010000 en binaire. Il y a 4 zéros à la fin => 80 = 2^4 * k

165 = 10100101 en binaire. Il n'y a aucun zéro à la fin (165 = 3*5*11) => 165 = 2^0 * k

Bon je ne donne pas de formule utilisant cette propriété car sur XL<2021 (sans Fonction Excel : FRACTIONNER.TEXTE) c'est fastidieux. Mais voilà une petite curiosité.

Merci pour l'ino

Bonjour saboh12617 ,

Je n'y avais pas pensé. Néanmoins DECBIN() semble limité au nombre max 511. Il vaudrait mieux utiliser la fonction BASE() (à/c d'Excel 2013).

BASE() doit accepter de convertir des nombres entre 0 et 2^53-1 dans une base comprise entre 2 à 36.

Mais comme tu l'as dit, ça ne change pas le fait qu'il faut compter le nombre de zéro en fin de nombre converti.

OK

Bonjour MoiToukol, Le Fil,

En utilisant FRACTIONNER.TEXTE et BASE comme indiqués dans les messages précédents.

Pour une valeur en cellule A1

Inscrire en case C1 la formule ci-dessous.

=FRACTIONNER.TEXTE(BASE(A1;2);0)-1

Afin de créer une ou des valeurs d'erreur en soustrayant 1 au résultat propagé par la fonction Fractionner.Texte

Ensuite en cellule B1 placer la formule suivante

=(DROITE(BASE(A1;2);1)="0")*NB.SI(C1#;"#VALEUR!")

Afin de vérifier si la fin de la propagation en C1 est bien un zéro. Si c'est le cas le NB.SI pourra ressortir la puissance de 2 en case B1. Sinon ce sera zéro.

On pourrait en B1 passer par une formule SI.

=SI(DROITE(BASE(A1;2);1)="0";NB.SI(C1#;"#VALEUR!");0)

C est bien, mais la formule matricielle a répondu à ma demande, en une seule case j'ai ma puissance de 2 et je l'ai même utilisé pour d'autres puissances, elle est parfaite pour ce que je fais, merci a tous

Rechercher des sujets similaires à "trouver puissance nombre quelconque"