2011-07-04 6 views
5

Hace algún tiempo, he visto en algún lugar un truco para realizar operaciones de módulo usando operadores de bits. Pero ahora no puedo de ninguna manera realizar una operación adecuada. Alguien sabe como hacerlo ? Por lo que recuerdo, fue más rápido que usar%.Otras formas de realizar la operación de módulo

+0

http://en.wikipedia.org/wiki/Modulo_operation#Performance_issues - para potencias de 2. –

+0

Buena pregunta, he comprobado aquí: http://jsperf.com/js-modulo y ¡las respuestas parecen buenas! – TTT

Respuesta

8

El "truco" está en binario AND un valor de 1. Cualquier número impar debe tener el primer bit puesto a 1.

Así

var foo = 7; 

if(foo & 1) { // true 
} 

El uso de un nivel de bits y tiene un mejor rendimiento en casi todas las plataformas/navegadores.

for(var loop = 0; loop < 10; loop++) { 
    if(loop & 1) { 
     console.log('I am ', loop, ' and I am odd!'); 
    } 
} 
8

Usted puede hacer el módulo de 2^k (una potencia de 2) por su valor AND con (2^k) -1.

+1

+1 pero solo para números positivos –

Cuestiones relacionadas