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
1006 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.

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;
}
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

private bool IsPowerOfTwo_2(ulong number)
{
    double log = Math.Log(number, 2);
    double pow = Math.Pow(2, Math.Round(log));
    return pow == number;
}
Copier après la connexion

<法> Explication de l'algorithme

Cet algorithme amélioré utilise intelligemment l'opération de bit:

bool IsPowerOfTwo(ulong x)
{
    return (x &amp; (x - 1)) == 0;
}
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!

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