Lenguaje de programación, compiladores, lenguajes intérpretes
Introducción
¡Bienvenid@ a una nueva clase de Programación Básica!
Hoy aprenderemos que, además del sistema decimal con el que contamos y hacemos cálculos en la vida cotidiana, existen otros sistemas numéricos útiles y ampliamente usados en el ámbito computacional. Por ejemplo, para representar los colores de cada píxel en una imagen digital, la dirección de memoria de un archivo o los dígitos binarios que se enviarán por puertos electrónicos para encender un islay, etc.
Averiguaremos cómo convertir números de un sistema numérico a otro y realizaremos operaciones aritméticas (suma, resta y multiplicación) en sistemas binario, hexadecimal y octal.
Además de reconocer la existencia de otras formas de contar y calcular, así como de adquirir la habilidad para hacer aritmética en estos sistemas, deberás tener presente que todos nuestros equipos de cómputo actuales (laptops, tabletas, celulares, etc.) se comunican gracias a uno de estos sistemas: el binario.
Te invitamos a mantener tu mente abierta e imaginar a los equipos de cómputo como entes capaces de comunicarse de forma distinta a como lo hacemos los humanos. Sin más, ¡comencemos!
Desarrollo del tema
En la vida cotidiana utilizamos los números decimales, con dígitos (0,1, 2, …,9) para contar y hacer cálculos. En la educación primaria aprendimos que cualquier cantidad puede representarse con este sistema decimal, Por ejemplo, al ver la cantidad 325, que leemos como “trescientos veinticinco”, entendemos que es una cifra formada por 3 centenas, más 2 decenas y 5 unidades; esto es conocido como suma ponderada, (3 x 100) + (2 x 10) + (5 x 1). Los números 3, 2 y 5 son elementos de nuestro sistema decimal. Los números 100, 10 y 1 es el peso asignado a cada número de acuerdo con la posición que ocupa.
La idea de suma ponderada permite expresar cantidades en otros sistemas numéricos. Sin embargo, existen algunas diferencias a considerar. En el sistema binario, podemos utilizar sólo dos dígitos (0 y 1). Para formar cantidades como el número 13 en decimal, tendríamos que usar la secuencia. Donde el subíndice 2 indica que el número está representado en el sistema binario. Esto es así porque en nuestra suma ponderada tendríamos los siguientes términos: (1 x 8) + (1 x 4) + (0 x 2) + (1 x 1) = 13.
Nota que, a diferencia del sistema decimal, donde los pesos eran 100 = 102, 10 = 101 y 1= 100, ahora en el sistema binario estos pesos son 8=,23 4= 22, 2 = 21 y 1 = 20. A partir de aquí podemos observar algunos patrones importantes: (Patrón 1) en el sistema decimal los pesos se forman con una base = 10 y en el sistema binario con una base = 2. (Patrón 2) los exponentes están asociados con la posición de los dígitos. (Patrón 3) el primer exponente comienza en 0 y se incrementa de derecha a izquierda. Teniendo estos patrones en mente, podemos ahora practicar y verificarlos al representar el número 22 decimal a sistema binario como (1 x 16) + (0 x 8) + (1 x 4) + (1 x 2) + (0 x 1) = 16+0+4+2+0 = 22. En este caso, los pesos se obtienen con las potencias de 2: 16= 24, 8= 23, 4= 22, 2 = 21 y 1 = 20. La representación en binario del número 22 sería entonces 10110_2.
En la vida cotidiana utilizamos los números decimales, con dígitos (0,1, 2, …,9) para contar y hacer cálculos. En la educación primaria aprendimos que cualquier cantidad puede representarse con este sistema decimal, Por ejemplo, al ver la cantidad 325, que leemos como “trescientos veinticinco”, entendemos que es una cifra formada por 3 centenas, más 2 decenas y 5 unidades; esto es conocido como suma ponderada, (3 x 100) + (2 x 10) + (5 x 1). Los números 3, 2 y 5 son elementos de nuestro sistema decimal. Los números 100, 10 y 1 es el peso asignado a cada número de acuerdo con la posición que ocupa.
La idea de suma ponderada permite expresar cantidades en otros sistemas numéricos. Sin embargo, existen algunas diferencias a considerar. En el sistema binario, podemos utilizar sólo dos dígitos (0 y 1). Para formar cantidades como el número 13 en decimal, tendríamos que usar la secuencia. Donde el subíndice 2 indica que el número está representado en el sistema binario. Esto es así porque en nuestra suma ponderada tendríamos los siguientes términos: (1 x 8) + (1 x 4) + (0 x 2) + (1 x 1) = 13.
Nota que, a diferencia del sistema decimal, donde los pesos eran 100 = 102, 10 = 101 y 1= 100, ahora en el sistema binario estos pesos son 8=,23 4= 22, 2 = 21 y 1 = 20. A partir de aquí podemos observar algunos patrones importantes: (Patrón 1) en el sistema decimal los pesos se forman con una base = 10 y en el sistema binario con una base = 2. (Patrón 2) los exponentes están asociados con la posición de los dígitos. (Patrón 3) el primer exponente comienza en 0 y se incrementa de derecha a izquierda. Teniendo estos patrones en mente, podemos ahora practicar y verificarlos al representar el número 22 decimal a sistema binario como (1 x 16) + (0 x 8) + (1 x 4) + (1 x 2) + (0 x 1) = 16+0+4+2+0 = 22. En este caso, los pesos se obtienen con las potencias de 2: 16= 24, 8= 23, 4= 22, 2 = 21 y 1 = 20. La representación en binario del número 22 sería entonces 10110_2.
Con este método de suma ponderada podemos representar cualquier número entero de nuestro sistema decimal a otro sistema. Para cambiar un número decimal a base octal, donde ahora tendremos 8 dígitos (0, 1, 2,…7), debemos considerar que nuestra base es 8 y por lo tanto los pesos en las posiciones serían 80 , 81 , 82 , y así sucesivamente, hasta 8N donde N es el número de dígitos que representan nuestro número. Por ejemplo, para representar el número 121 decimal en base octal, necesitamos los términos 82 = 64, 81 = 8 y 80 = 1.
Sabemos que son suficientes estos tres pesos, porque el siguiente, que seria nuestro cuarto peso, 83 = 512 supera al valor buscado. Ahora demos ver cuál dígito de los 8 que tiene nuestro sistema octal debemos multiplicar cada peso para formar el 121 decimal. Comenzamos con le peso mayor 82 = 64, vemos que, si usamos un , para hacer (2 x 64 = 128) de nueva cuenta habríamos superado el valor buscado, por lo tanto, el primer término de nuestra suma ponderada debe ser (1 x 64). Ahora restamos el 64 al 121, de forma que 121 – 64 = 57. Este será nuestro nuevo objetivo a lograr con una combinación de los pesos restantes (81 = 8 y 80= 1). Recordando que siempre conviene iniciar con el peso más grande disponible, podemos hacer (7 x 8) = 56 y obtendríamos nuestro segundo término. Restamos a nuestro objetivo 57 el segundo término encontrado 56 y obtenemos 57-56 =1 Finalmente, este nuevo objetivo consiste en obtener el número 1 a partir de una combinación con nuestro peso restante (80 = 1), vemos que el término (1 x 80) = (1 x 1) es el que necesitamos. Por lo tanto, el número 121 decimal equivale al número (1 x 82) (7 x 81) (1 x 80) = 1718. El número 171 NO debemos leerlo como «ciento setenta y
uno» sino como «uno siete uno en base ocho».
Esta estrategia de suma ponderada podemos usarla para hacer conversiones a cualquier sistema numérico. Uno de los más comunes e importantes es el sistema hexadecimal. A diferencia del binario y octal, que tienen menos dígitos que el decimal, el sistema hexadecimal requiere símbolos para representar 16 elementos. Por lo tanto, sus 16 elementos son (0,1,2,3, …, 9, A, B, C, D, E, F). Los dígitos 0 a 9 que usamos en nuestro sistema decimal, pero añadiendo las letras A a F, donde A tiene un valor de 10 en el sistema decimal, la B un 11, la C un 12 y así sucesivamente, correspondiendo a la F un valor de 15 en decimal. Para este sistema nuestra base es 16 y, por lo tanto, nuestros pesos serían 160 = 1, 161 = 16, 162 = 256, etc. Para representar por ejemplo el número 453 decimal a hexadecimal, seguiremos el mismo proceso que en los ejemplos previos para octal y binario. Esto es, seguir los siguientes pasos:
- Tomar como objetivo el número inicial, restar el máximo valor posible de multiplicar un peso y un dígito del sistema sin superar el valor objetivo.
- Restar el término obtenido al valor objetivo
- Tomar el resultado de la resta como nuestro nuevo valor objetivo
- Buscar el máximo valor posible que resulte de multiplicar alguno de los dígitos de nuestro sistema con el mayor peso no usado anteriormente
- Repetir los pasos 2 a 4 hasta obtener exactamente el valor objetivo.
Siguiendo este conjunto de pasos, convirtamos el 453 decimal a hexadecimal. Observamos que podríamos multiplicar un 1 con el peso 162 = 256, ya que al usar un 2 superaríamos el valor objetivo. Así que nuestro primer término sería (1 x 162) = 256. Restamos 453-256 = 197 y fijamos el 197 como nuestro nuevo objetivo. Para saber qué digito usar para multiplicar con el siguiente peso disponible 161 = 16, podemos dividir 197/16 = 12.3125. Esto nos permite observar que la parte entera = 12 señala el dígito del sistema hexadecimal a utilizar. En nuestro caso 12 = C. Por lo tanto, el segundo término de nuestra suma ponderada sería (C x 161) = (12 x 16) = 192. Al restarlo a nuestro objetivo, tendríamos 197-192 = 5. El 5 es nuestro objetivo final que obtendríamos fácilmente con (5 x 160) = 5. Finalmente, nuestra suma ponderada sería (1 x 162) + (C x 161) + (5 x 160) = 256 + 192 + 5 = 453 y, por tanto, el número 1C516 equivale al número 453 en decimal.
Te recomendamos revisar el siguiente video donde podrás visualizar el método explicado anteriormente, además de su uso relacionado con la capacidad de memoria de una computadora.
Después de revisar el video, contesta las siguientes preguntas:
- ¿En el video se utiliza el mismo método descrito en esta clase de la suma ponderada o se utiliza otro método?
- ¿Fue más fácil entender los ejemplos del video o los ejemplos dados en esta clase?
También puedes practicar y verificar tus resultados con las herramientas disponibles en diversos sistemas operativos. Por ejemplo, en la calculadora de Windows, vista de programador puedes introducir un número en representado en decimal, binario, octal o hexadecimal y ver su representación equivalente en el resto de los sistemas.
Una aplicación común en la representación hexadecimal la encontramos al asignar un color a una figura en diversos procesadores de imágenes (tales como power point, Photoshop, etc.). La siguiente figura muestra la asignación de un color FFD966 en el recuadro etiquetado como Hex.
Existen múltiples aplicaciones en electrónica donde podemos ver la importancia de los sistemas numéricos. Te invitamos a mantener tu curiosidad y continuar con tus habilidades autodidactas para estudiar cómo hacer cálculos aritméticos con estos sistemas numéricos.
Conclusión
Existen sistemas numéricos distintos al decimal con los que podemos representar diversos elementos computacionales.
- Los sistemas numéricos más comunes al manipular computadoras son el binario, octal y hexadecimal.
- El método de la suma ponderada nos permite cambiar cualquier número decimal a otros sistemas numéricos.
- En el método de la suma ponderada, podemos reconocer patrones útiles como la base y el exponente para generalizar su uso a cualquier sistema numérico.
- Existen aplicaciones en cualquier sistema operativo que nos facilitan las conversiones entre sistemas numéricos y simplifican también las operaciones numéricas.
Encontramos aplicaciones de los sistemas numéricos en la vida cotidiana al manipular dispositivos de cómputo. Uno de las más comunes es para codificación de colores al manipular imágenes.
Fuentes de información
- Chavez A. (2017). Aprenda a diseñar algoritmos. Sello Editorial UNAD. Capítulo 2 URL: https://repository.unad.edu.co/bitstream/handle/10596/11970Chave;jsessionid=D20A6649E17352AA307F10E15817DF59.jvm1?sequence=3
- Jiménez J.A (2014) Matemáticas para la computación. Alpha Editorial. Segunda Edición