Che cosa significa il codice bit a bit “$ n & ($ n - 1)” fare?
-
20-09-2019 - |
Domanda
Che cosa significa questo codice significa e quali sono altri modi ottenere lo stesso risultato senza utilizzare po spostamento?
if ($n & ($n - 1))
Soluzione
controlla se un numero è una potenza di 2 (se la sua condizione come scritto è vero, allora il numero è non una potenza di due).
Detto in altro modo, i vostri controlli di prova per vedere se v'è più di un "1" bit impostato nella rappresentazione binaria di $n
. Se v'è zero o solo set di un bit, allora il test sarà falso.
E 'di gran lunga il modo più efficace per determinare la proprietà.
Altri suggerimenti
In primo luogo, questo codice è valido PHP, in modo che il titolo è scarsa.
In secondo luogo, l'aritmetica binaria in corso simile a questa:
42 = 101010
&
41 = 101001
-----------
40 = 101000
Come Greg afferma questo è il modo più veloce per verificare la presenza di una potenza di 2 il numero, ma il codice che hai dato controlli per vedere se il numero è non è una potenza di 2 . Questo può essere facilmente accertato dalla politica di PHP di:. Qualsiasi valore diverso da zero non nullo / è vero