O que o código bit -bowise “$ n & ($ n - 1)”?
-
20-09-2019 - |
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))
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.