Pergunta

O que esse código significa e quais são as outras maneiras que realizam o mesmo sem usar a mudança de bit?

if ($n & ($n - 1))
Foi útil?

Solução

Aquela fórmula verifica para ver se um número é uma potência de 2 (Se sua condição como escrita for verdadeira, então o número é não um poder de dois).

Declarado de outra maneira, seus testes de teste para ver se há mais de um bit "1" definido na representação binária de $n. Se houver zero ou apenas um conjunto, seu teste será falso.

É de longe a maneira mais eficiente de determinar essa propriedade.

Outras dicas

Primeiro, esse código é PHP válido, então seu título é ruim.

Segundo, a aritmética binária acontecendo parece algo assim:

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

Como Greg afirma Não é um poder de 2. Isso pode ser facilmente verificado pela política do PHP de: qualquer valor não nulo/diferente de zero é verdadeiro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top