Pregunta

¿Qué significa este código y lo son otras maneras de lograr lo mismo sin el uso de desplazamiento de bits?

if ($n & ($n - 1))
¿Fue útil?

Solución

Esa fórmula comprueba para ver si una número es una potencia de 2 (si su condición como está escrito es verdad, entonces el número es no una potencia de dos).

Dicho de otra manera, los cheques de prueba para ver si hay más de un bit "1" establecido en la representación binaria de $n. Si no es cero o uno único conjunto de bits, entonces su prueba será falsa.

Es de lejos la forma más eficiente para determinar esa propiedad.

Otros consejos

En primer lugar, el código PHP es válida, por lo que su título es pobre.

En segundo lugar, la aritmética binaria pasando es como la siguiente:

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

Al igual que Greg establece esta es la manera más rápida para verificar si hay una potencia de 2 número, pero el código que has dado comprobaciones para ver si el número es no es una potencia de 2 . Esto puede comprobarse fácilmente política de PHP:. Ningún no nulo valor distinto de cero / es verdad

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top