Was bedeutet der bitweise Code „$ n & ($ n - 1)“ tun?
-
20-09-2019 - |
Frage
Was bedeutet diesen Code Mittelwert und was es andere Möglichkeiten, accomplish das gleiche, ohne Bitverschiebung mit?
if ($n & ($n - 1))
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