BotonMenu
BotonIndice

Visita : conoce3000.com
Paypal : https://www.paypal.com/donate/?hosted_button_id=XY8TZ3MGN64GE

PASCAL CON FREE PASCAL

PASCAL CON FREE PASCAL

PASCAL CON FREE PASCAL


3. OPERADORES PARA TIPOS DE DATOS SIMPLES.
3.6. OPERADORES PARA DÍGITOS BINARIOS (BITS - DÍGITOS BINARIOS)
3. OPERADORES PARA TIPOS DE DATOS SIMPLES.
3.6. OPERADORES PARA DÍGITOS BINARIOS (BITS - DÍGITOS BINARIOS)
3. OPERADORES PARA TIPOS DE DATOS SIMPLES.
3.6. OPERADORES PARA DÍGITOS BINARIOS (BITS - DÍGITOS BINARIOS)

SIGUIENTE

SIGUIENTE

SIGUIENTE


‒ Operadores para dígitos binarios.

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.
Operador Nombre Ejemplo a y b son de tipo byte. a:=%00010100 b:=%00000110 Resultado
not Negación. c:=not a; Da como resultado : %11101011 que seria 235.
and Conjunción o Producto binario. c:=a and b; Da como resultado : %00000100 que seria el 4.
or Disyunción o Adición binaria. c:=a or b; Da como resultado : %00010110 que seria el 22.
xor Disyunción exclusiva o Adición exclusiva binaria. c:=a xor b; Da como resultado : %00010010 que seria el 18.
shl Desplazamiento a la izquierda. c:= a shl 2; Da como resultado : %01010000 que seria el 80.
shr Desplazamiento a la derecha. c:=a shr 2; Da como resultado : %00000101 que seria el 5.


El programa siguiente muestra el uso de estos operadores:


Descargar
{$codepage UTF8}

VAR
  a,b,c:byte;

BEGIN
  a:=%00010100; //20 en decimal
  b:=%00000110; //6 en decimal
  Writeln('a= ',a);
  Writeln('b= ',b);
  c:=not a;
  Writeln('not a = ',c);
  c:= a and b;
  Writeln('a and b = ',c);
  c:= a or b;
  Writeln('a or b = ',c); 
  c:= a xor b;
  Writeln('a xor b = ',c);
  c:= a shl 2;
  Writeln('a shl 2 = ',c);
  c:= a shr 2;
  Writeln('a shr 2 = ',c); 
  readln;
END.
Código fuente 11: Ejemplo del uso de los operadores binarios.
Descargar

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:


Descargar
{$codepage UTF8}

VAR
  a,b,c:byte;
  bandera1,bandera2,bandera3,bandera4,bandera5,bandera6,bandera7,bandera8:byte;
  compuertas:byte;
BEGIN
  //Multiplicación y División por potencias de 2
  a:=4;
  Writeln('4 por 2 a la 1 = ',a shl 1); 
  Writeln('4 por 2 a la 2 = ',a shl 2);  
  Writeln('4 dividido por 2 a la 1 = ',a shr 1);
  Writeln('4 dividido por 2 a la 2 = ',a shr 2);
  
  //Determinar el estado de bits
  a:=%00010100; //20 en decimal
  b:=%00000100; //mascara verifica 3er bit
  Writeln(a and b); // Muestra distinto de cero, esta activado
  b:=%00001000; //mascara verifica 4to bit
  Writeln(a and b); // Muestra 0 no esta activado
  
  //Apagar o poner a 0 un bit
  a:=%00000010; // 2 en decimal
  b:=%11111101; 
  a:=a and b;  
  Writeln('a = ',a);  // da como resultado 0 
  
  //Apagar o poner a 1 un bit  
  a:=%00000000; // 0 en decimal
  b:=%00000010;
  a:=a or b;  
  Writeln('a = ',a); // 2 en decimal
  
  //Juntar Banderas
  
  bandera1:=%00000001; //1
  bandera2:=%00000010; //2
  bandera3:=%00000100; //4
  bandera4:=%00001000; //8
  bandera5:=%00010000; //16
  bandera6:=%00100000; //32
  bandera7:=%01000000; //64
  bandera8:=%10000000; //128
  
  compuertas:=bandera1 or bandera3 or bandera4;
  //compuertas --> %00001101 --> 13 en decimal
  //el valor 13 nos indica que las compuertas 1,3 y 4 estan abiertas.
  Writeln('Compuertas = ',Compuertas);
  
  readln;
END.
Código fuente 12: Ejemplo del uso más comun de los operadores binarios.
Descargar




SIGUIENTE
SIGUIENTE
SIGUIENTE


 
‒ Comentarios y sugerencias.

Agradezco de antemano, todo comentario, sugerencia, y donativo a través de , que ayude a mejorar los contenidos educativos de Conoce 3000. Además, cualquier pregunta o duda que tengas lo puedes hacer por este medio. Pero, todo contenido que pueda resultar ofensivo, malicioso, racista, sexista, discriminatorio, obsceno, vulgar será eliminado. Para clases particulares contactame por whatsapp al 📲 (+51) 999 264 073








PORTADA |  INTERESANTE |  APUNTES |  LIBROS |  GALERIA


Creative Commons License


Todos los textos, imágenes y videos de Conoce3000 estan colocados bajo una licencia : Creative Commons Reconocimiento-NoComercial 3.0 Unported License.