Ne bu kod anlama ve başka yolları bit kaydırma kullanmadan aynı başarmak nelerdir?
if ($n & ($n - 1))
Bu formül checks to see whether a number is a power of 2 (yazılı olarak koşul doğruysa, o zaman iki numaralı not bir güçtür).
Başka bir şekilde ifade, kendi test eder $n
ikili gösterimi belirlenen birden fazla "1" bit olup olmadığını görmek için. Sıfır ya da sadece bir bit kümesi varsa, o zaman test yanlış olacaktır.
Bu kadar bu özelliği belirlemek için en etkili yoldur.
Öncelikle, bu kod geçerli PHP, böylece başlık kötüdür.
İkincisi, devam ikili aritmetik şöyle:
42 = 101010
&
41 = 101001
-----------
40 = 101000
Greg devletler gibi bu 2 sayının bir gücü kontrol etmek için en hızlı yoldur, ancak sayı olup olmadığını görmek için denetler verdiğim kodu not a power of 2. Bu kolayca PHP'nin politikası ile tespit edilebilir: Herhangi non-null/non-zero değeri doğrudur.