Operadores bit a bit (BitWise)

Manipulación eficiente a bajo nivel


Aunque en el ecosistema Javascript no es algo que se utilice de forma frecuente, existen los denominados operadores a nivel de bit o «bitwise». Se trata de una serie de operadores que nos permiten realizar operaciones o cálculos básicos, pero trabajando a un nivel más bajo.

Operadores bitwise

Los operadores bitwise permiten realizar operaciones que se hacen más «cerca de la máquina», por lo que son más eficientes. Esto es ideal si necesitamos realizar operaciones intensivas de forma masiva, ya que al llamarlas gran cantidad de veces, una mejora de rendimiento se vuelve notable.

Veamos algunos de estos operadores:

Nombre Operador Descripción
Operador AND a & b Devuelve 1 si ambos operandos son 1.
Operador OR a | b Devuelve 1 si al menos un operando es 1.
Operador XOR (OR exclusivo) a ^ b Devuelve 1 si ambos operandos son diferentes.
Operador NOT (unario) ~a Invierte los bits del operando (ej: 000101 -> 111010). Trunca a 32 bits.
Operador double NOT (unario) ~~a Trunca los decimales del número, convirtiéndolo en entero. Sólo 32 bits.
Operador LEFT SHIFT a << b Desplazamiento de bits hacia la izquierda. Ej: 11 (3) pasa a 110 (6).
Operador RIGHT SHIFT a >> b Desplazamiento de bits hacia la derecha. Ej: 11 (3) pasa a 1 (1).
Operador RIGHT SHIFT sin signo a >>> b Desplazamiento de bits hacia la derecha, como un operador sin signo.

Por ejemplo, los tres primeros suelen ser los más habituales, donde podríamos crear las llamadas tablas de verdad. En las columnas a y b tenemos los valores de dos operandos. A la derecha, tenemos el resultado de realizar la operación AND, OR, XOR, etc. con esos dos operandos:

 a   b     AND   OR    XOR     NOT AND   NOT OR   NOT XOR
--- ---   ----- ----- -----   --------- -------- ---------
 0   0      0     0     0         1         1        1
 0   1      0     1     1         1         0        0
 1   0      0     1     1         1         0        0
 1   1      1     1     0         0         0        1

Por ejemplo, la operación 1 AND 1, es decir, 1 & 1 toma como resultado 1, mientras que la operación 0 OR 0, es decir, 0 | 0 toma como resultado 0.

Sin embargo, ten en cuenta que los operadores a nivel de bit son más complejos y pueden utilizarse en Javascript con valores diferentes de 0 y 1.

Asignación a nivel de bit

De la misma forma que anteriormente vimos que tenemos a nuestra disposición unos operadores de asignación compactos para realizar tareas más verbosas, tenemos de la misma forma una serie de operadores de asignación a nivel de bit.

Son los siguientes:

Nombre Operador Descripción
Desplazamiento a la izquierda y asignación a <<= b Es equivalente a a = a << b.
Desplazamiento a la derecha y asignación a >>= b Es equivalente a a = a >> b.
Desplazamiento a la derecha sin signo y asignación a >>>= b Es equivalente a a = a >>> b.
Operación AND y asignación a &= b Es equivalente a a = a & b
Operación OR y asignación a |= b Es equivalente a a = a | b
Operación XOR y asignación a ^= b Es equivalente a a = a ^ b

Existen muchos otros operadores en Javascript, pero los iremos viendo poco a poco en siguientes artículos temáticos.

¿Quién soy yo?

Soy Manz, vivo en Tenerife (España) y soy streamer partner en Twitch y profesor. Me apasiona el universo de la programación web, el diseño y desarrollo web y la tecnología en general. Aunque soy full-stack, mi pasión es el front-end, la terminal y crear cosas divertidas y locas.

Puedes encontrar más sobre mi en Manz.dev