Buscar..


Detección de paridad del número con Bitwise Y

En lugar de esto (desafortunadamente, se ve con demasiada frecuencia en el código real) "obra maestra":

function isEven(n) {
    return n % 2 == 0;
}

function isOdd(n) {
    if (isEven(n)) {
        return false;
    } else {
        return true;
    }
}

Puedes hacer la comprobación de paridad mucho más efectiva y sencilla:

if(n & 1) {
    console.log("ODD!");
} else {
    console.log("EVEN!");
}

(Esto es realmente válido no solo para JavaScript)

Intercambiando dos enteros con Bitwise XOR (sin asignación de memoria adicional)

var a = 11, b = 22;
a = a ^ b;
b = a ^ b;
a = a ^ b;
console.log("a = " + a + "; b = " + b);// a is now 22 and b is now 11

Multiplicación más rápida o división por potencias de 2.

Desplazar los bits a la izquierda (derecha) es equivalente a multiplicar (dividir) por 2. Es lo mismo en la base 10: si "desplazamos a la izquierda" 13 por 2 lugares, obtenemos 1300 o 13 * (10 ** 2) . Y si tomamos 12345 y el "desplazamiento a la derecha" por 3 lugares y luego eliminamos la parte decimal, obtenemos 12 , o Math.floor(12345 / (10 ** 3)) . Entonces, si queremos multiplicar una variable por 2 ** n , podemos desplazar a la izquierda por n bits.

console.log(13 * (2 ** 6)) //13 * 64 = 832
console.log(13    <<   6)  //          832

De manera similar, para hacer una división de enteros (floored) por 2 ** n , podemos desplazar a la derecha por n bits. Ejemplo:

console.log(1000 / (2 ** 4)) //1000 / 16 = 62.5
console.log(1000    >>   4)  //            62

Incluso funciona con números negativos:

console.log(-80 / (2 ** 3)) //-80 / 8 = -10
console.log(-80      >> 3)  //          -10

En realidad, es poco probable que la velocidad de la aritmética tenga un impacto significativo en el tiempo de ejecución de su código, a menos que lo haga en el orden de cientos de millones de cálculos. ¡Pero a los programadores de C les encanta este tipo de cosas!



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow