Frage

Was bedeutet diesen Code Mittelwert und was es andere Möglichkeiten, accomplish das gleiche, ohne Bitverschiebung mit?

if ($n & ($n - 1))
War es hilfreich?

Lösung

Diese Formel prüft, ob ein sehen Zahl ist eine Potenz von 2 (wenn Ihr Zustand als wahr geschrieben ist, dann ist die Zahl nicht eine Zweierpotenz).

Mit anderen Worten, Ihr Test überprüft, um zu sehen, ob es mehr ist als eine „1“ Bit gesetzt in der binären Darstellung von $n. Wenn es keine oder nur eine Bit gesetzt ist, dann wird Ihr Test falsch sein.

Es ist bei weitem die effizienteste Art und Weise diese Eigenschaft zu bestimmen.

Andere Tipps

Als erstes dieser Code ist gültig PHP, so dass Ihr Titel schlecht ist.

Zweitens ist die binäre Arithmetik auf Aussehen geht in etwa so:

42 = 101010
   &
41 = 101001
-----------
40 = 101000

Wie Greg besagt dies der schnellste Weg ist für eine Leistung von 2 Nummer zu überprüfen, aber der Code, den Sie prüft gegeben haben, um zu sehen, wenn die Zahl nicht eine Potenz von 2 . Dies kann leicht durch die PHP-Politik festgestellt werden. Jeder nicht-null / Nicht-Null-Wert ist wahr

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top