Capítulo 1. Conceptos básicos
Para la correcta comprensión del contenido del presente capítulo y de los capítulos siguientes, es necesario tener en claro ciertos conceptos básicos acerca de los sistemas de numeración utilizados en la electrónica digital (básicamente, el sistema binario y el hexadecimal), los tipos de operaciones matemáticas relacionadas con estas bases numéricas y las diversas interpretaciones que se pueden obtener de las cifras binarias.
1.1 Definiciones básicas
A continuación se presenta una serie de conceptos importantes sobre electrónica digital; los tipos de base numérica binaria, decimal y hexadecimal; los métodos aritméticos para obtener los cambios de base, operaciones lógicas y aritméticas en estos sistemas numéricos; y los formatos de numeración BCD y ASCII, que son sumamente utilizados en las aplicaciones con sistemas embebidos.
1.1.1 El sistema de numeración binario y hexadecimal
En el mundo de los dispositivos lógicos digitales, las operaciones realizadas siempre involucran patrones numéricos en formato binario. La unidad mínima de este formato es el bit. Un bit se representa por dos niveles o estados lógicos: ‘1’ o ‘0’. Normalmente, un nivel ‘1’ lógico viene a estar físicamente representado por una magnitud en voltios, y el nivel ‘0’, en otra magnitud de voltaje. Por ejemplo, en la tecnología TTL1, el nivel lógico ‘1’ se encuentra determinado en el rango entre 2 V y 5.5 V, mientras que el nivel ‘0’ está entre 0V y 0.8 V. Cualquier nivel de voltaje fuera de este rango (entre 0.8 y 2 V) es considerado como un estado indeterminado o ‘X’, con el cual será imposible realizar operaciones lógicas a nivel digital.
Las cifras binarias, por lo general, no se componen de un solo bit. Normalmente, están compuestas por una cantidad múltiplo de ocho bits. En el gráfico 1.1 se muestran los tipos de arreglos binarios más utilizados en la electrónica digital.
Gráfico 1.1. Arreglos binarios más comunes usados en la electrónica digital
|
Tamaño | Valor mínimo y máximo | Denominación |
1 bit | 0 – 1 | Bit |
4 bits | 0000 – 1111 | Nibble |
8 bits | 0000 0000 – 1111 1111 | Byte |
16 bits | 0000 0000 0000 0000 – 1111 1111 1111 1111 | Word |
32 bits | 0000 0000 0000 0000 0000 0000 0000 0000 – 1111 1111 1111 1111 1111 1111 1111 1111 | Double Word |
Elaboración propia.
Una cifra binaria posee la siguiente nomenclatura: (código binario)2, donde el subíndice 2 indica la base. Por ejemplo, la cifra 010100002 es un byte con un valor equivalente al número 80 en base decimal (base 10). La nomenclatura para la base hexadecimal se representa antecediendo un 0x sobre el código hexadecimal. Por ejemplo, la cifra mostrada se puede representar como 0x50 en la base hexadecimal. El bit ubicado en el extremo derecho de la cifra en base binaria es conocido como el bit LSB2 y representa el valor menos significativo. De la misma manera, el bit del extremo izquierdo es considerado el bit MSB3 o más significativo. Al igual que en el sistema de numeración decimal, una cifra ubicada en la posición de las centenas o millares (izquierda) presenta mayor significancia que una cifra ubicada en la posición de las decenas o unidades (derecha).
En el sistema binario, la base numérica utilizada es 2. Esto significa que cada bit puede estar representado únicamente por dos cifras: ‘0’ o ‘1’. La posición del bit dentro de la cifra especifica un valor formado por la cifra 2 elevado a una potencia y multiplicado por el valor del bit (‘0’ o ‘1’). El valor de dicha potencia es la posición del bit en la cifra. Por ejemplo, si se observa el* gráfico 1.2, en el byte de la figura, el bit LSB tiene un aporte de 20 (ya que 0 es la posición menos significativa), mientras que el bit MSB aporta con 27. Esto implica que el valor de la cifra es el siguiente:
valor = 27 × 0 + 26 × 1 + 25 × 0 + 24 × 1 + 23 × 0 + 22 × 0 + 21 × 0 + 20 × 0
Como se puede observar, el valor obtenido es 64+16 = 80, cifra equivalente en base decimal. Conforme se agreguen más dígitos binarios a esta cifra, el exponente de la base binaria se incrementará en uno. Por ejemplo, si una cifra binaria posee 11 bits, el bit MSB tendrá un peso equivalente de 210.
Al igual que en el caso de las cifras decimales, donde existen prefijos como kilo (103), Mega (106) o Giga (109), entre otros que son usados para abreviar magnitudes elevadas, existen también los mismos prefijos para definir grandes magnitudes en cifras binarias formadas por longitudes con base en 8 bits (1 byte). Es así que para el sistema binario:
1 kB (Se pronuncia un kilo byte) = 210 bytes o 1024 bytes
1 MB (Se pronuncia un mega byte) = 210 kB o 1024 kB
1 GB (Se pronuncia un giga byte) = 210 MB o 1024 MB
Gráfico 1.2. Ejemplo sobre los pesos de cada bit de una cifra binaria
Elaboración propia.
Al igual que en el sistema de numeración binario, se emplean otros sistemas numéricos para representar cifras en otras bases. Uno de los más usados en la programación de sistemas embebidos es la base hexadecimal4. En ella cada cifra tiene un peso, dependiendo de una potencia en base 16. En este sistema existen 16 cifras diferentes (valores de 0 a 15) para representar una magnitud. Por ejemplo, para las cifras del 0 al 9 se utilizan los mismos dígitos que en el sistema decimal. Para completar los 6 dígitos restantes se utilizan letras del alfabeto, como el siguiente caso:
En el número hexadecimal mostrado en el gráfico 1.3, cada cifra representa un nibble, dado que se tienen 16 posibles valores diferentes y esto equivale a una combinación de 4 bits (24 estados). Cada dígito representa una potencia de 16, según su posición en la cifra. En el ejemplo, el valor decimal equivalente del número hexadecimal mostrado es el siguiente:
valor = 163 × 10 + 162 × 3 + 162 × 4 + 160 × 12
De esta manera, el valor decimal equivalente es 40 960 + 768 + 64 + 12 = 41 804. Como se puede observar, esta cifra pudo haber sido representada en el sistema binario con el siguiente código: 10100011010011002, lo cual habría resultado en una cifra más larga, al estar conformada por 16 dígitos. En cambio, en el sistema hexadecimal se utilizan únicamente 4 dígitos para representar la misma cifra numérica, lo cual permite abreviar valores de magnitudes muy extensas.
El sistema de numeración hexadecimal es el preferido cuando se quiere representar magnitudes superiores a 28 y, al mismo tiempo, se desea mantener la visualización del código binario. Esto permite obtener una mejor comprensión del orden de la cifra sin perder de vista su forma a nivel binario (ya que es fácilmente visible el código binario a partir de cada nibble o dígito hexadecimal).
Gráfico 1.3. Ejemplo sobre los pesos de cada cifra hexadecimal
Elaboración propia.
1.1.2 Conversiones entre bases
La base decimal es el formato más utilizado por los seres humanos para interpretar las cifras numéricas que operan diariamente para sus tareas cotidianas. Las personas comunes y corrientes han aprendido a realizar operaciones aritméticas en base a este sistema de numeración. Entonces, la pregunta que cae por su propio peso es la siguiente: «¿por qué el programador debe conocer otros sistemas de numeración, como el binario y el hexadecimal?» La respuesta a esta pregunta es obvia: porque al programar un sistema embebido no se debe pensar como seres humanos sino como un computador, y el sistema de numeración utilizado por estas máquinas es, por naturaleza, el binario.
Durante la programación de un sistema embebido no es necesario que el programador realice las conversiones de bases en el código ingresado. Para el software d...