Trzeba sprawdzić, kawałek po kawałku, z funkcją mniej więcej tak:
function p2(n) {
if (n === 0) return false;
while (n) {
if (n & 1 && n !== 1) return false;
n >>= 1;
}
return true;
}
Niektóre CPU zestawy instrukcji włączyły „liczyć zestaw bitów” operacja (starożytny seria CDC Cyber był jednym) . Jest to przydatne w przypadku niektórych struktur danych zaimplementowanych jako kolekcje bitów. Jeśli masz zestaw zaimplementowany jako ciąg liczb całkowitych, z pozycjami bitowymi odpowiadającymi elementom ustawionego typu danych, to liczenie bitów obejmuje liczenie bitów.
edit wow patrząc na odpowiedzi Teda HOPP za natknąłem to:
function p2(n) {
return n !== 0 && (n & (n - 1)) === 0;
}
To od this awesome collection of "tricks". Rzeczy takie jak ten problem są powody do studiowania teorii liczb :-)
Sprawdź [to pytanie] (http://stackoverflow.com/questions/109023/how-to-count-the-number-set-bits-in-a-32-bit-integer). Nie specyficzne dla javascript, ale interesujące. –
Dzięki Rob, znalazłem to (wygląda nieco bardziej prosto) http://stackoverflow.com/questions/1053582/how-does-this-bitwise-operation-check-for-a-power-2of – Tim
Tylko FYI, 'OMD' = [' Old MacDonald'] (https://en.wikipedia.org/wiki/Old_MacDonald_Had_a_Farm). – rvighne