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:

NombreOperadorDescripción
Operador ANDa & bDevuelve 1 si ambos operandos son 1.
Operador ORa | bDevuelve 1 si al menos un operando es 1.
Operador XOR (OR exclusivo)a ^ bDevuelve 1 si ambos operandos son diferentes.
Operador NOT (unario)~aInvierte los bits del operando (ej: 000101 -> 111010). Trunca a 32 bits.
Operador double NOT (unario)~~aTrunca los decimales del número, convirtiéndolo en entero. Sólo 32 bits.
Operador LEFT SHIFTa << bDesplazamiento de bits hacia la izquierda. Ej: 11 (3) pasa a 110 (6).
Operador RIGHT SHIFTa >> bDesplazamiento de bits hacia la derecha. Ej: 11 (3) pasa a 1 (1).
Operador RIGHT SHIFT sin signoa >>> bDesplazamiento 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:

NombreOperadorDescripción
Desplazamiento a la izquierda y asignacióna <<= bEs equivalente a a = a << b.
Desplazamiento a la derecha y asignacióna >>= bEs equivalente a a = a >> b.
Desplazamiento a la derecha sin signo y asignacióna >>>= bEs equivalente a a = a >>> b.
Operación AND y asignacióna &= bEs equivalente a a = a & b
Operación OR y asignacióna |= bEs equivalente a a = a | b
Operación XOR y asignacióna ^= bEs 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