Todos los tipos de datos enteros, que se usen en un programa, siempre estarán representados por dígitos binarios, estos operadores para dígitos binarios nos permiten trabajar con la representación binaria de los tipos de datos enteros. Los operadores son los mismos que los operadores lógicos ya conocidos, y dos adicionales shl y shr; que se encargan de desplazar los dígitos binarios a la izquierda o derecha, la cantidad indicada.

Los operadores shl y shr, desplazan los dígitos binarios del siguiente modo: shl desplaza los dígitos binarios a la izquierda, rellenando con ceros por la derecha, y shr desplaza los dígitos binarios a la derecha, rellenando con ceros por la izquierda.

Los dígitos binarios que se desplazan a la izquierda con shl, se pierden siempre y cuando se desplacen más allá del tamaño del tipo de dato entero que se esté usando; lo mismo sucede con shr, pero en sentido contrario.

El resultado de los distintos operadores para dígitos binarios se resume a continuación:

Operadores para digitos binarios

El programa siguiente muestra el uso de estos operadores:

Estos operadores binarios nos permiten realizar ciertas operaciones, que son muy comunes en el mundo de la programación, mencionare algunas de ellas:

  • Multiplicación y División por potencias de 2.- Una observación importante del operador shl es que al desplazar 1 bit a la izquierda un número, este se multiplica por 21, y si se desplaza 2 bits a la izquierda se multiplica por 22, si se desplaza 3 bits lo multiplica por 23, y así sucesivamente con las potencias de 2; y si queremos dividir un número por las potencias de 2 hacemos lo mismo pero usando el operador shr.
  • Determinar el estado de bits.- Si deseamos saber si el bit de un numero, esta en 1 o mejor dicho encendido se debe usar el operador and con otro número que tenga en 1 el bit que queremos verificar, si el resultado es 0 significa que el bit no está en 1 o encendido, caso contrario será distinto de cero. Es decir del número 198 que en binario será: %11000110, queremos saber si el bit 2, (de derecha a izquierda, empezando con cero), esta encendido o en 1 debemos hacer lo siguiente: resultado:=198 and %100.
  • Apagar o poner a 0 un bit.- Para poner a 0 un determinado bit, es decir si queremos poner a 0 el bit 3, del número binario %111101, debemos usar and con el siguiente número binario, %110111 al que comúnmente se le conoce como máscara. Como se puede observar en la máscara el tercer bit esta en cero y el resto en 1, si queremos cambiar a 0 otro bit entonces en la máscara se debe poner a 0 el bit que queremos cambiar y el resto colocarlo en 1. El resultado de la operación será el número con el bit cambiado.
  • Encender o poner a 1 un bit.- Para poner a 1 un determinado bit, es decir si queremos poner a 1 el bit 3, del número binario %110101, debemos usar or con la siguiente mascara %001000. Si queremos cambiar otro bit se debe poner en la máscara 1 en el bit que queremos cambiar y el resto de bits en 0. El resultado de la operación será el número con el bit cambiado.
  • Juntar Banderas.- La bandera o flag se refiere al uso de un determinado bit como un indicador, en donde el valor 1 del bit indica, según sea la situación que la propiedad, característica, atributo o estado de algo, está activo y el valor 0 indicará lo contrario. En un byte se pueden almacenar 8 banderas, y para juntar las banderas en un byte se suele usar el operador or , es decir si tenemos las siguientes banderas, todas de tipo byte:

    bandera1:=%00000001;
    bandera2:=%00000010;
    bandera3:=%00000100;
    bandera4:=%00001000;
    bandera5:=%00010000;
    bandera6:=%00100000;
    bandera7:=%01000000;
    bandera8:=%10000000;

    y cada una representan el estado abierto de las 8 compuertas de una represa, podemos unir las banderas 1, 3 y 4 en una variable denominada compuertas de tipo byte con el operador or del siguiente modo: compuertas:=bandera1 or bandera3 or bandera4, y para determinar que compuerta está abierta podemos usar el operador and para determinar el estado del bit. El uso de la unión de banderas es muy común con el manejo de los atributos de un archivo.

El siguiente programa de ejemplo muestra los cuatro usos antes mencionados: