S. Noriega Sistemas de Numeracion
S. Noriega Sistemas de Numeracion
Sistemas de Representación
Numéricos.
1 - Introducción.
2 - Sistemas de numeración:
Representación de números sin signo:
Decimal.
Binario.
Octal.
Hexadecimal.
BCD.
5 – Código de Gray.
6 - Bibliografía.
Años antes, estos procesos se realizaban con técnicas analógicas, es decir, por
ejemplo, el control de temperatura de un horno se podía hacer utilizando una termocupla
como elemento sensor, cuya señal se compensaba, amplificaba y se comparaba con otra de
referencia.
Posteriormente la señal resultante era amplificada, derivada y/o integrada
( control PID) para excitar a la etapa de potencia ( por ejemplo una resistencia eléctrica).
Con respecto a los sistemas informáticos, como por ejemplo las populares
computadoras personales, todo su funcionamiento se basa en un dispositivo digital
denominado microprocesador, el cual, bajo el control de un programa ( sucesión de
instrucciones almacenadas en una memoria), puede realizar entre otras cosas operaciones
matemáticas, operaciones lógicas, comunicación con otros dispositivos complejos como
impresoras, disco rígido, etc..
Este programa, el cual viene a ser como el “repertorio” que debe seguir el
microprocesador para que todo funcione correctamente, está escrito en un lenguaje a base
de números.
Así como en las tareas cotidianas es común que nosotros realicemos operaciones
matemáticas de suma, resta, multiplicación, división, etc. con los llamados números
decimales, en los sistemas digitales se emplea otro tipo de numeración, otro código, que se
denomina código binario, el cual fue elegido por su sencillez de implementación con la
electrónica que disponemos hoy en día.
Podemos decir que hay infinitos sistemas a emplear, para representar una cantidad.
i0
N S n1 S n 2 S 2 S1 S 0
n 1 n 2 2 1 0
N S n1 b S n 2 b S 2 b S1 b S 0 b
Para representar un número donde puede tener parte entera y/o decimal
( dígitos a la derecha de la coma) se puede emplear la misma expresión anterior:
n 1
N Si b i
i m
n 1 n2 1 2
N S n 1 b S n2 b S 2 b S 1 b S 0 b S 1 b S 2 b
2 1 0
m
... S m b
n 1
N Si 10
i
i 0
n 1 n2 2 1 0
N S n1 10 S n 2 10 S 2 10 S1 10 S 0 10
En este caso, cada dígito Si podrá tomar cualquiera de los 10 símbolos posibles del
0 al 9.
Se observa que el número N está representado por n dígitos, donde cada uno de
ellos tiene un “peso” diferente, siendo el de mayor valor el que está mas a la izquierda y el de
menor el que está mas sobre la derecha.
Cada uno tiene un factor de 10 elevado a un índice que está directamente
relacionado con su posición en la representación de dicho número.
Por ejemplo un número entero que se quiera representar con 4 dígitos, podrá ir de
0000 a 9999, es decir, que se pueden representar 10000 números diferentes ( incluído el 0),
siendo el rango de 10000 y el número máximo, 9999.
n
Rango = 10
1
n1
Número máximo = 10
Número mínimo = 0
En dicho sistema, la base es igual a b = 2. Esto quiere decir que cada dígito que
representa a un número en este sistema podrá tener uno de dos símbolos diferentes, el 0 o
el 1.
Este sistema es la base de la lógica digital para poder realizar funciones matemáticas
ó lógicas ( se verá esto mas adelante, en otro capítulo).
n 1
N Si 2
i
i 0
Siendo su desarrollo:
n 1 n 2 2 1 0
N S n1 2 S n 2 2 S 2 2 S1 2 S 0 2
Aquí cada dígito Si tiene un peso diferente según su posición, siendo el MSB ( Most
Significative Bit) ó bit mas significativo, el de mayor peso, es decir, el primero de la izquierda
y el LSB ( Least Significative Bit) ó bit menos significativo, el de menor peso, el primero
desde la derecha.
Por ejemplo, el número binario 1010010 de 7 bits, tiene un “1”como MSB y un “0” como LSB.
Por ejemplo un número que se quiera representar con 4 bits podrá ir de 0000 a 1111,
es decir, que se pueden representar 16 números diferentes ( incluído el 0), siendo el rango
de 16 y el número máximo, 15.
n
Rango = 2
1
n
Número máximo = 2
Número mínimo = 0
n 1 n2 1 2
N S n 1 2 S n2 2 S 2 2 S 1 2 S 0 2 S 1 2 S 2 2
2 1 0
m
... S m 2
Este sistema numérico de representación usa base 8, es decir que cada dígito consta
de uno de entre 8 símbolos del 0 al 7.
n 1
N Si 8
i
i 0
Siendo su desarrollo:
n1 n 2 2 1 0
N S n1 8 S n2 8 S 2 8 S1 8 S 0 8
n
Rango = 8
1
n
Número máximo = 8
Número mínimo = 0
A representa el 10 decimal.
B representa el 11 decimal.
C representa el 12 decimal.
D representa el 13 decimal.
E representa el 14 decimal.
F representa el 15 decimal.
n 1
N Si 16
i
i 0
Y su desarrollo:
n1 n 2 2 1 0
N S n1 16 S n2 16 S 2 16 S1 16 S 0 16
n
Rango = 16
1
n
Número máximo = 16
Número mínimo = 0
De igual manera que con los enteros, los números reales tendrán la forma:
n 1 n 2 1
N S n1 16 S n2 16 S 2 16 S 1 16 S 0 16 S 1 16
2 1 0
2 m
S 16
2
... S m 16
Con este sistema de númeración se expresa un número decimal ( base 10), por
medio de dígitos, los cuales cada uno está formado por un paquete de cuatro números
binarios.
0000 = "0"
0001 = "1"
0010 = "2"
0011 = "3"
0100 = "4"
0101 = "5"
0110 = "6"
0111 = "7"
1000 = "8"
1001 = "9"
Ejemplos: El número decimal 779 se expresa en BCD como : 0111 0111 1001
y el número 6523,4201 como: 0110 0101 0010 0011 , 0100 0010 0000 0001
n 1 n2 1 2
N S n 1 2 S n2 2 S 2 2 S 1 2 S 0 2 S 1 2 S 2 2
2 1 0
m
... S m 2
Basta con realizar las operaciones de suma y producto y se tiene el número decimal.
Debajo del mismo se marca el "peso" respectivo cuando hay un "1" en esa posición,
haciendo luego la suma total de los "pesos" que dará el valor definitivo del número en base
10.
Lo mismo para los númeroa binarios que tienen parte decimal donde se debe
agregar hacia la derecha después del "1", los términos 0,5, 0,25, 0,125, 0,0625, etc.
Ejemplo: El número 773 en octal desarrollado será: 7 x 8^2 + 7 x 8^1 + 3 x 8^0 = 507 en
decimal, donde aquí los "pesos"son 1 para el dígito menos significativo, 8 para el siguiente,
luego 8^2 = 64, etc.
Como se vió para números binarios, es posible confeccionar una tabla de conversión
a fin de convertir rápidamente un número de octal a decimal.
Lo único que cambia son los valores de los "pesos" en cada posición.
n 1 n2 1 2
N S n 1 2 S n2 2 S 2 2 S 1 2 S 0 2 S 1 2 S 2 2
2 1 0
m
... S m 2
Para explicar esto tomaremos como ejemplo la conversión del número 135,138
decimal a binario.
1) Tomando solo la parte entera del número N ( 135,138), la que llamaremos N1( 135),
lo que se quiere hacer es determinar el valor ( 0 ó 1) de cada uno de los dígitos
binarios que lo componen.
n1 n 2 2 1 0
N 1 S n1 2 S n 2 2 S 2 2 S1 2 S 0 2
n 2 n 3 1 0 1
N 1 / 2 S n1 2 S n 2 2 S 2 2 S1 2 S 0 2
Para determinar S1, se procede igual que en el paso anterior, donde ahora hay que
tomar ese cociente y volver a dividirlo por 2.
Se obtendrá así que el resto de esa división corresponderá a S1 ( segundo bit menos
significativo).
Se procede así hasta determinar el último dígito binario, el cual corresponde al resto
de la división cuyo cociente sea nulo.
Del ejemplo:
135 2
12 67 2
015 6 33 2
1 07 2 16 2
1 13 16 8 2
1 0 8 4 2
0 4 2 2
0 2 1 2
0 1 0
Su representación es:
1 2 m
N 2 S 1 2 S 2 2 ... S m 2
Como para el caso del número entero, lo que hay que determinar aquí son los dígitos
binarios que lo representan.
Cabe aclarar que salvo que el número fraccionario en base 10 sea múltiplo de
potencias de -2, el mismo puede estar representado por un número muy grande ó hasta
infinitos dígitos binarios, donde obviamente habrá que redondear con n cifras significativas.
Esto es una ventaja ya que resulta muy fácil realizar conversiones entre estos
sistemas.
8 7 6 5 4 3 2 1 0
N S 8 2 S 7 2 S 6 2 S 5 2 S 4 2 S 3 2 S 2 2 S1 2 S 0 2
Al agrupar:
N ( S 8 2 S 7 2 S 6) 2 ( S 5 2 S 2 S )2
2 1 6 2 1 3
4 3
S 2 S 2 S 2
2 1 0
2 1 0
N ( S 8 2 S 7 2 S 6) 8 ( S 5 2 S 2 S )8
2 1 2 2 1 1
4 3
( S 2 2 S 1 2 S 0) 8
2 1 0
Vemos que ahora aparecen términos cada uno con un "peso" igual a una potencia de
8, desde 1 para el menos significativo, luego 2^1 = 8, 2^8 = 64, etc.
Cada término está formado por tres dígitos binarios que pueden variar desde 000 a
111.
De aquí se puede concluir que dado un número binario entero, tomando grupos de a
tres bits de derecha a izquierda, cada grupo pasado al número decimal que representa nos
dará los dígitos en octal.
0 0 1 1 1 0 0 1 1 1 0 0 0 1 0 1 0 1 1 1 0 0 0 1
1 6 3 4 2 5 6 1
Se observa en este caso que debido a que el número de bits no es múltiplo de tres
se deben agregar "ceros" a la izquierda hasta completar un dígito octal con tres bits.
De igual manera si el número tuviera parte fraccionaria, se deben agrupar los bits
desde la posición de la coma hacia la derecha de tres en tres.
El análisis es similar al caso anterior en octal, con la diferencia que para lograr
obtener dígitos en hexa se deben agrupar de a cuatro bits para convertir un formato binario
en base 16.
Si faltan bits en la parte entera se agregan ceros adelante y si faltan bits en la parte
fraccional se agregan ceros al final.
0 1 1 0 1 1 0 0 ,0 1 0 1 1 1 1 0
6 C 5 E
Se vió que la intención de representar números en una base de sólo dos símbolos
por dígito era para poder implementar artificialmente un sistema que pudiera tener la
habilidad de realizar cálculos.
Por tal motivo habiendo solo bits ó digitos binarios, con la condición "0" ó "1", se
defiine el signo como un bit el cual con dos estados puede representar la condición de
"negativo"ó "positivo".
Signo y Módulo.
Signo y Módulo:
Por convención un número positivo se distingue por tener su bit mas significativo
( MSB), en "0".
Un número negativo se puede identificar por tener un "1" en su bit mas significativo.
Dados un número de n bits, entonces se tiene que un bit se reserva para el signo,
mientras que los (n - 1) restantes representarán el módulo de dicho número.
Por lo tanto mientras un número sin signo puede valer como máximo 2^n -1, aquí
tenemos que al perder un bit en el signo, el máximo módulo será: 2^(n-1) - 1.
Resumiendo:
11111 = - 15
11110 = - 14
11101 = - 13
...................
10001 = - 1
10000 = - 0
00000= + 0
00001 = + 1
..................
01111 = +15
En este sistema un número positivo ó negativo del mismo módulo se diferencian sólo
en el bit mas significativo.
Por ejemplo los números 100110 y 000110 corresponden a los números -6 y +6,
respectivamente expresados con 6 bits.
En la siguiente figura vemos una representación gráfica de los posibles números que
se pueden representar con 3 bits.
000 = +0
111 = -3 001 = +1
110 = -2 010 = +2
101 = -1 011 = +3
000 = -0
Este sistema de representación, tiene la misma regla que el de signo y módulo para
los números positivos.
En cambio para los negativos usa la siguiente definición:
N*1 = 2^n - 1 - N
1 1 1 1 1 1
0 0 1 1 1 0
1 1 0 0 0 1
1 1 1 1 1 1
1 1 0 0 1 1
0 0 1 1 0 0
000 = +0
111 = -0 001 = +1
110 = -1 010 = +2
101 = -2 011 = +3
100 = -3
Dado un número positivo o negativo de n bits, su complemento tiene los n bits todos
invertidos.
En el ejemplo de n = 3, +1 = 001 y - 1 = 110, + 2 = 010 y - 2 = 101, etc.
Por lo tanto aquí obtenemos una regla simple de conversión de un número binario
representado por el método de complemento a 1 de un dado signo a otro de igual módulo
pero signo opuesto:
Este sistema de representación tiene como ventaja que es mas fácil de implementar
operaciones de suma y resta que con el de signo y módulo, aunque sigue teniendo doble
representación del cero.
El pasaje de un número a otro de igual módulo y distinto signo es muy fácil de
implementar por una unidad aritmético lógica UAL de la cual dispone cualquier
microprocesador.
N*2 = 2^n - N
Se nota que la diferencia entre Ca1 y Ca2 es el 1 que en este último caso no se resta
a N.
000 = +0
111 = -1 001 = +1
110 = -2 010 = +2
101 = -3 011 = +3
100 = -4
N = +22 = 00010110
1 0 0 0 0 0 0 0 0
0 0 0 1 0 1 1 0
1 1 1 0 1 0 1 0
N*2 = N*1 + 1
Valor decimal Código Gray de 1 bit Código Gray de 2 bits Código Gray de 3 bits
0 0 00 000
1 1 01 001
2 - 11 011
3 - 10 010
4 - - 110
5 - - 111
6 - - 101
7 - - 100
De allí en mas, para generar un código Gray de mayor cantidad de bits, se hace un
proceso, que es el que se explicará a continuación:
Para generar un código de 2 bits, se copian los dígitos “0” y “1” de la tabla para el
código de un bit en forma vertical ( ver tabla anterior los bits en “negritas”) y luego se vuelven
a copiar esos mismos bits hacia abajo pero de tal manera que se rebaten los mismos, es
decir, se vuelven a copiar como un espejo ( ver bits en rojo). Para este caso, eso implica que
se pone un “1” y luego un “0”.
Quedan entonces cuatro números de un bit que se arriba hacia abajo son 0110, es
decir,
0
1
1
0
00
01
11
10
000
001
011
010
110
111
101
100
Si se quisiera hacer uno de 4 bits, se parte desde uno de 3 bits, realizando el mismo
procedimiento.
Está constituído por un disco ranurado, solidario a un eje, y dos pares de emisor –
detector ópticos, de tal manera que cada juego está alineado con el eje, pero a un radio
diferente uno del otro.
Hasta aquí parecería que un código binario sería suficiente para lograr la codificación
de posición angular a binario.
Pero el problema surge cuando por ejemplo ocurre alguna desalineación en uno o
ambos detectores, lo cual puede traducirse en errores al interpretar las señales recibidas.
esto significa que una desalineación puede generar que ambos sensores no cambien
en el mismo instante cuando el disco gira ya que uno puede estar mas adelantado o atrasado
que el otro. Esto entonces genera temporariamente, códigos erróneos que pueden generar
problemas serios de control, etc..
Vemos que aparecen códigos que no debieran aparecer y esto es debido a que el
sensor S0 está muy adelantado en el disco y cambia primero que S1, por eso es que en vez
de pasar desde S1 S0 = 01 directamente a 10, pasamos antes por 00, ya que S0 recibió el
nuevo bit “0” pero S1 todavía sigue viendo el “0” anterior.
Lo mismo ocurre al querer pasar de 11 a 00, donde hay un estado adicional, el 10,
dado que S0 responde primero.
Aquí, una vuelta completa del disco está codificada como: 00 01 11 10.
6 - Bibliografía.
1 Circuitos Digitales y Microprocesadores. Herbet Taub.
Editorial Mc Graw Hill.
2 Sistemas Digitales: Principios y aplicaciones. Ronald Tocci.
Editorial Prentice - Hall.
3 Electrónica Digital. James W. Bignell.
Editorial CECSA.
4 Nota de aplicación de Altera Corporation, A – AN – 083 -01