Heim >Backend-Entwicklung >C++ >Wie kann ich effizient bestimmen, ob eine Zahl eine Leistung von 2 ist?

Wie kann ich effizient bestimmen, ob eine Zahl eine Leistung von 2 ist?

Linda Hamilton
Linda HamiltonOriginal
2025-01-29 19:41:09369Durchsuche

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

wie man effizient beurteilen, ob eine Reihe von Zahlen 2

ist <:> Frage:

Wie können Sie effizient bestimmen, ob die angegebene Anzahl von Zahlen 2 ist, ohne dass schwebende Punktvorgänge oder Verschiebungsvorgänge verwendet werden?

Antwort:

Ein einfacher und effizienter Algorithmus lautet wie folgt:

Erläuterung:

<code class="language-c#">bool IsPowerOfTwo(ulong number)
{
    return (number != 0) && ((number & (number - 1)) == 0);
}</code>
Bit und der Komponenten (&) Vergleich jeder Ziffer, wenn beide Ziffern 1, Rückgabe 1, ansonsten 0 sind. Durch Minus 1 aus der Zahl erstellen wir eine Binärzahl, die minimale effektive Position (die Bit in der ursprünglichen Nummer auf 1) wird auf 1 gesetzt. Wenn die ursprüngliche Nummer die Leistung von 2 ist, entzieht der Minus 1 alle Positionen auf der rechten Seite der höchsten Einstellungsposition, so dass das Ergebnis des Betriebs und der Betrieb 0 beträgt. Im Gegenteil, wenn die ursprüngliche Zahl nach 1 Subtraktion keine Leistung von 2 ist, wird die binäre Darstellung der Zahl mindestens zwei Bits bis 1 festgelegt, was dazu führt .

Beispiel:

Betrachten Sie die Zahlen 8 (binär 1000). Subtrahieren Sie 1, um 7 zu erhalten (binär 0111).

<:> Hinweis:

Der obige Algorithmus kehrt auf 0 zurück, und 0 ist nicht die Kraft von 2. Wenn Sie 0 ausschließen möchten, können Sie den Algorithmus wie folgt ändern:

Das obige ist der detaillierte Inhalt vonWie kann ich effizient bestimmen, ob eine Zahl eine Leistung von 2 ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn