Déterminez si un certain nombre de nombres sont 2
Déterminez si le nombre donné est la puissance de 2, qui nécessite un algorithme simple et précis. L'auteur propose deux algorithmes, mais a rencontré le problème lors de l'utilisation du calcul des nombres.
Le premier algorithme
Le premier algorithme Utilisez un cycle simple pour vérifier la puissance de 2 à travers le déplacement:
Cette méthode est simple et facile à comprendre, et elle peut fonctionner parfaitement pour n'importe quelle valeur IsPowerOfTwo
.
<code class="language-c#">private bool IsPowerOfTwo(ulong number) { if (number == 0) return false; for (ulong power = 1; power > 0; power = power << 1) { if (power == number) return true; if (power > number) return false; } return false; }</code>
ulong
Cependant, en raison du problème du rejet, cet algorithme ne peut pas être correctement géré 9223372036854775809.
L'algorithme amélioré IsPowerOfTwo_2
<code class="language-c#">private bool IsPowerOfTwo_2(ulong number) { double log = Math.Log(number, 2); double pow = Math.Pow(2, Math.Round(log)); return pow == number; }</code>
Explication de l'algorithme
Cet algorithme amélioré utilise intelligemment l'opération de bit:
<code class="language-c#">bool IsPowerOfTwo(ulong x) { return (x & (x - 1)) == 0; }</code>
Soustrayez 1 du nombre pour transformer tout le 1 à 0, et tournez tout 0 à 1.
Si le nombre est la puissance de 2, le binaire indique qu'il n'y aura qu'un seul chiffre.Lorsque le nombre et (x -1) sont effectués et l'opération, tout le bit sauf 1 à l'extrême droite sera 0.
&
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!