Devi controllare pezzo per pezzo, con una funzione più o meno così:
function p2(n) {
if (n === 0) return false;
while (n) {
if (n & 1 && n !== 1) return false;
n >>= 1;
}
return true;
}
Alcune CPU set di istruzioni hanno incluso un'operazione di "contare impostare i bit" (l'antica serie CDC Cyber è stato uno) . È utile per alcune strutture dati implementate come raccolte di bit. Se hai un set implementato come una stringa di numeri interi, con posizioni di bit corrispondenti a elementi del tipo di dati impostato, ottenere la cardinalità implica contare i bit.
modificare wow esaminando la risposta di Ted Hopp mi sono imbattuto in questo:
function p2(n) {
return n !== 0 && (n & (n - 1)) === 0;
}
Questo è da this awesome collection of "tricks". Cose come questo problema sono buone ragioni per studiare la teoria dei numeri :-)
Dai un'occhiata a [questa domanda] (http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer). Non specifico per javascript, ma interessante. –
Grazie Rob, ho appena trovato questo (sembra un po 'più diretto) http://stackoverflow.com/questions/1053582/how-does-this-bitwise-operation-check-for-a-power-of-2 – Tim
Solo FYI, 'OMD' = [' Old MacDonald'] (https://en.wikipedia.org/wiki/Old_MacDonald_Had_a_Farm). – rvighne