Heim > Backend-Entwicklung > C++ > Wie können wir effizient feststellen, ob eine Zahl eine Leistung von 2 ist?

Wie können wir effizient feststellen, ob eine Zahl eine Leistung von 2 ist?

Barbara Streisand
Freigeben: 2025-01-29 19:21:10
Original
1006 Leute haben es durchsucht

How Can We Efficiently Determine if a Number is a Power of 2?

Bestimmen Sie, ob eine Anzahl von Zahlen 2

ist

Problembeschreibung

Bestimmen Sie, ob die angegebene Zahl die Leistung von 2 ist, was einen einfachen und genauen Algorithmus erfordert. Der Autor schlägt zwei Algorithmen vor, tritt jedoch bei der Verwendung der Berechnung von Zahlen auf das Problem auf.

Der erste Algorithmus

Der erste Algorithmus Verwenden Sie einen einfachen Zyklus, um die Leistung von 2 durch die Verschiebung zu überprüfen:

Diese Methode ist einfach und leicht zu verstehen und kann perfekt für jeden IsPowerOfTwo -Wertzustands ausgeführt werden.

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;
}
Nach dem Login kopieren
<种> Der zweite Algorithmus

ulong

Der zweite Algorithmus <第二> stützt sich auf die Berechnung der Zahlen:

Aufgrund des Problems der Absicherung kann dieser Algorithmus jedoch nicht ordnungsgemäß behandelt werden 9223372036854775809.

<进> Der verbesserte Algorithmus 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;
}
Nach dem Login kopieren

<法> Algorithmus Erklärung

Dieser verbesserte Algorithmus verwendet geschickt die Bitoperation:

bool IsPowerOfTwo(ulong x)
{
    return (x &amp; (x - 1)) == 0;
}
Nach dem Login kopieren
Bitoperator Überprüfen Sie, ob die beiden Bits der entsprechenden Position 1 sind.

1 von der Nummer subtrahieren, um alle 1 bis 0 zu drehen und alle 0 bis 1 zu drehen.

Wenn die Zahl die Leistung von 2 ist, gibt die Binärdatei an, dass es nur eine Ziffer geben wird.

Wenn die Zahl und (x -1) ausgeführt werden und der Betrieb, ist alles außer 1 recht rechts 0.
  • Wenn das Ergebnis 0 ist, ist die Zahl der Leistung von 2. &
  • Null
  • entfernen
  • Um Null zu beseitigen (Null -NOT -kontrollierter Strom ist 2), ist zusätzliche Bedingungen
  • .

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

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage