Maison > développement back-end > C++ > Comment pouvons-nous déterminer efficacement si un nombre est une puissance de 2?

Comment pouvons-nous déterminer efficacement si un nombre est une puissance de 2?

Barbara Streisand
Libérer: 2025-01-29 19:21:10
original
945 Les gens l'ont consulté

How Can We Efficiently Determine if a Number is a Power of 2?

Déterminez si un certain nombre de nombres sont 2

Description du problème

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>
Copier après la connexion
Le deuxième algorithme

ulong

Le deuxième algorithme s'appuyant sur le calcul des nombres:

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>
Copier après la connexion

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>
Copier après la connexion
Opérateur de bits Vérifiez si les deux bits de la position correspondante sont 1.

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.
  • Par conséquent, si le résultat est 0, le nombre est la puissance de 2. &
  • supprimer zéro
  • Afin d'éliminer zéro (zéro -not-consommation de puissance est 2), les conditions supplémentaires
  • .

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal