Co ten kod oznacza i jakie są inne sposoby osiągnięcia tego samego bez użycia zmiany bitowej?
if ($n & ($n - 1))
Co ten kod oznacza i jakie są inne sposoby osiągnięcia tego samego bez użycia zmiany bitowej?
if ($n & ($n - 1))
Formuła checks to see whether a number is a power of 2 (jeśli warunek jak napisane jest prawdą, to liczba jest nie potęgą dwójki).
Innymi słowy, Twój test sprawdza, czy w binarnej reprezentacji $n
jest ustawiony więcej niż jeden bit "1". Jeśli jest ustawiony zero lub tylko jeden bit, twój test będzie fałszywy.
Jest to zdecydowanie najbardziej efektywny sposób określenia tej właściwości.
Greg, pytanie jest w istocie adaptacją, która sprawdza, czy liczba nie jest potęgą dwójki. Bez '== 0' PHP przyjmuje dowolną niezerową wartość jako true. –
Tak, myślałem, że logiczna negacja będzie jasna. Niemniej jednak poprawiłem moją odpowiedź, aby to wyraźnie podkreślić. –
Cóż, to nie jest negacja na pierwszy rzut oka (to byłoby "! = 0"), a moim wrażeniem eyze jest to, że jest na poziomie początkującym. –
Po pierwsze, ten kod jest prawidłowy w PHP, więc Twój tytuł jest słaby.
drugie, arytmetyki binarnej dzieje wygląda mniej więcej tak:
42 = 101010
&
41 = 101001
-----------
40 = 101000
jak Greg członkowskich jest to najszybszy sposób, aby sprawdzić, o mocy 2 liczby, ale kod dałeś sprawdza, jeśli numer to , nie ma mocy 2. Można to łatwo stwierdzić na podstawie polityki PHP: każda wartość inna niż zero/zero jest prawdą.
To w rzeczywistości bitowe, a nie nieco przesunięcie. –
Praca domowa? wywiad? :) – DVK
Dlaczego miałbyś unikać operacji bitowych? – MAK