Operadores a nivel de bit

Hay un tipo más de operadores, los que se denominan "a nivel de bit":

  • >> Desplazamiento de bits a la derecha
  • << Desplazamiento de bits a la izquierda
  • & Operador lógico "y" a nivel de bits
  • | Operador lógico "o" a nivel de bits
  • ^ Operador lógico "xor" a nivel de bits
  • Operador lógico "not" a nivel de bits

Básicamente involucran uno o dos valores que son convertidos a formato binario antes de ejecutarse la operación. Por ejemplo, consideremos los números 4 y 5 que, en binario, se representan del siguiente modo (la función bin devuelve en formato binario el número que se incluya como argumento):

Operadores a nivel de bit

Si aplicamos el operador & ("y" lógico) se van a comparar los bits de los números 4 y 5 por parejas, aplicándose el operador "y" (cuando ambos bits sean 1, se devolverá 1, devolviéndose 0 en cualquier otro caso):

Operadores a nivel de bit

El resultado es 4 ("100" en binario), pues de los 3 bits que forman los valores 4 y 5, solo el situado más a la izquierda toma el valor 1 para ambos valores.

Apliquemos el operador | (operador lógico "o") a los mismos valores. Se devolverá 1 cuando alguno de los bits comparados tome el valor 1, y 0 cuando ambos bits sean 0:

Operadores a nivel de bit

En este caso, de los tres pares de bits a considerar, tanto el situado más a la izquierda como el situado más a la derecha toman el valor 1 para alguno de los dos valores (4 = 0b100 y 5 = 0b101).

Los operadores >> y << desplazan los bits del primer número tantas posiciones como indique el segundo número. Por ejemplo, volvamos a considerar el número 4 en binario:

Operadores a nivel de bit

Con la operación 4 << 1 estamos desplazando los bits del número 4 una posición hacia la izquierda, y con 4 << 2 estamos desplazándolos dos posiciones hacia la izquierda:

Operadores a nivel de bit

Si el desplazamiento es hacia la derecha, se pierden los bits que haya a la derecha del número. Por ejemplo el número 5 se representa en binario como "101". Si desplazamos los bits una posición hacia la derecha, el bit menos significativo (el situado a la derecha) se perdería:

Operadores a nivel de bit