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):
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):
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:
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:
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:
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: