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

Un nombre est-il une puissance de 2? Comment pouvons-nous déterminer efficacement cela?

DDD
Libérer: 2025-01-29 19:26:12
original
831 Les gens l'ont consulté

Is a Number a Power of 2?  How Can We Efficiently Determine This?

si le nombre de chiffres est 2 est la puissance de 2

Instruction de question

Dans l'informatique, un problème commun est de déterminer si le nombre donné est la puissance de 2. Ce problème est particulièrement dans l'analyse appliquée et d'algorithme. Cet algorithme devrait avoir les caractéristiques suivantes:

Le code est simple et clair.
  1. peut gérer avec précision toute valeur entière longue non signée.
  2. Méthode
Méthode 1: Méthode de la puissance du décalage

Une méthode pour résoudre ce problème est d'itérer 2 puissance continue, vérifiez si une puissance -in -Ul correspond au numéro d'entrée. Cela peut être mis en œuvre comme suit: Méthode 2: Le nombre d'algorithmes de calcul

Une autre méthode implique le calcul de l'utilisation du nombre de paires. Cependant, cela nécessite une prudence car les calculs flottants peuvent entraîner une précision. Considérez le code suivant:
private bool IsPowerOfTwo(ulong number)
{
    if (number == 0)
        return false;

    for (ulong power = 1; power > 0; power <<= 1)
    {
        if (power == number)
            return true;
        if (power > number)
            return false;
    }
    return false;
}
Copier après la connexion

La solution optimale: méthode informatique bit Les solutions plus efficaces sont l'utilisation des opérations de bits. La puissance de 2 a une caractéristique unique: lorsque le (x -1) est effectué et l'opération (&), la valeur de résultat est toujours 0. Cet attribut peut être exprimé comme suit: <表示>

Afin d'éliminer le candidat de la puissance de zéro comme 2, il peut être légèrement modifié:

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 <解>

Vérifiez la position de chaque bit de la représentation binaire de x et (x -1) par la position et l'opération (&). Si les deux sont 1, le résultat est 1; Par conséquent, la puissance de 2 est 0 avec la position (x -1) et le résultat de calcul de 0.

Cette méthode fournit une solution efficace et directe pour déterminer si le nombre est 2.
bool IsPowerOfTwo(ulong x)
{
    return (x & (x - 1)) == 0;
}
Copier après la connexion

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal