Heim >Backend-Entwicklung >C++ >Wie kann ich effizient bestimmen, ob eine Zahl eine Leistung von 2 ist?
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!