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

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

Linda Hamilton
Libérer: 2025-01-29 19:41:09
original
368 Les gens l'ont consulté

How to Efficiently Determine if a Number is a Power of 2?

comment juger efficacement si un certain nombre de nombres sont 2

Question:

Comment déterminer efficacement si le nombre donné de nombres est 2 sans utiliser de fonctions flottantes ou d'opérations de déplacement?

Réponse:

Un algorithme simple et efficace est le suivant:

Explication:

<code class="language-c#">bool IsPowerOfTwo(ulong number)
{
    return (number != 0) && ((number & (number - 1)) == 0);
}</code>
Copier après la connexion
Bit et la comparaison des composants (&) de chaque chiffre, si les deux chiffres sont 1, retournez 1, sinon 0. En insignifiant 1 à partir du nombre, nous créons un numéro binaire, la position efficace minimale (le bit défini dans le numéro d'origine sur 1) est défini sur 1. Si le numéro d'origine est la puissance de 2, le moins 1 supprime toutes les positions sur le côté droit de la position de réglage la plus élevée, de sorte que le résultat de l'opération et de l'opération est 0. Au contraire, si le nombre d'origine n'est pas une puissance de 2, après 1 soustraction, la représentation binaire du nombre sera définie au moins deux bits à 1, ce qui entraînera le résultat et l'opération entraînera une valeur non zéro .

Exemple:

Considérons les nombres 8 (binaire 1000). Soustrayez 1 pour obtenir 7 (binaire 0111).

Remarque:

L'algorithme ci-dessus renvoie true à 0, et 0 n'est pas la puissance de 2. Si vous souhaitez exclure 0, vous pouvez modifier l'algorithme comme suit:

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