Diferentes sistemas de numeración

Anuncio
ORGANIZACIÓN DE COMPUTADORAS
Docentes:
Prof. Oscar Montes
Prof. Roberto García
Tema:
Apuntes de la asignatura
Año:
2011
Diferentes sistemas de numeración
En nuestra vida cotidiana, parece obvio el uso del sistema de numeración
que utilizamos y resulta difícil cuestionarnos acerca de si es el mejor, o puede haber
otros. Esto resulta así porque nos es útil para nuestro uso y nos parece natural que
teniendo diez dedos (y habiendo aprendido a sumar con ellos), el sistema de numeración sea el decimal.
Si nos ponemos a investigar el origen de los sistemas de numeración veremos que no es tan obvio el uso del sistema decimal, por cierto en la escuela hemos
visto el sistema romano y de hecho seguimos viéndolo para significar el año en las
películas y (por lo menos a algunos) nos divierte tratar de sacar la fecha, teniendo en
cuenta las reglas que nos enseñaron. Este sistema podría haber sido de utilidad para
los romanos, cuya dedicación primordial no era la construcción o el cálculo sino la
conquista. Es poco práctico para hacer operaciones simples de suma y resta porque
no posee la característica de ser posicional. recordemos que esta característica la posee el sistema decimal y permite que, usando los mismos símbolos, el valor relativo de
cada uno dentro del número general dependa de su posición.
En un ejemplo se verá mejor que usando muchas palabras: supongamos el
4592. Si descomponemos ese número desde la derecha hacia la izquierda y comenzamos a contar las posiciones desde cero, el valor relativo se encuentra multiplicando
el símbolo por la base (10 en nuestro caso) elevada al número de la posición. En el
caso que nos ocupa tendríamos:
2 * 100
2*1 = 2
dos unidades
1
9 * 10
9*10 = 90
nueve decenas
5 * 102
5*100=500
cinco centenas
3
4 * 10
4*1000=4000
cuatro u. de mil
Por lo tanto, cada “columna” vale diez veces la anterior, o poniéndolo en
función de la base de numeración, cada columna vale una potencia más de la base
que la anterior.
Introduje el concepto de la base porque cuando veamos que existen otros tipos de numeración, podremos utilizar el concepto de base en todos los casos, pero en
cada caso en particular cambiará el valor de dicha base. Todos los sistemas que veremos luego tienen la característica de ser posicionales y por ello se comportan operativamente como el decimal.
La base tiene relación directa con la cantidad de símbolos o signos a utilizar:
necesitamos la cantidad de símbolos representada por la base: en el decimal utilizamos diez símbolos (del 0 al 9). Si quisiéramos un código de base 6 usaríamos seis
símbolos, uno de base 9 usaría nueve símbolos y así sucesivamente. Ahora..¿qué
sucedería si necesitamos una base 16?, podríamos optar por cualquier símbolo que se
nos ocurriera, pero como nos vamos a referir a valores es conveniente usar los símbolos que todo el mundo conoce, es decir que si bien la elección de los símbolos es personal, si queremos que otras personas nos entiendan deberemos convencer a los
otros que es una buena idea usar los símbolos que inventamos y a partir de ese convencimiento de los demás, se genera una convención y todos aquellos que usen ese
sistema de numeración, también utilizarán los símbolos convencionados.
Con bases menores que diez, la convención es usar los símbolos tradicionales, es decir que si uso un sistema de base 7, por conveniencia usaré los dígitos del 0
al 6 inclusive. El problema comienza con bases mayores de diez.
Para la ciencia informática es de utilidad el uso de base 16 (hexadecimal) y
para esta base la convención es usar los diez primeros dígitos conocidos y agregarle
2/ 37
las seis primeras letras del abecedario para los faltantes. Como este sistema de numeración puede tener valores entre 0 y 15 (la base menos uno), la A equivale al valor 10,
la B al 11…y la F al 15.
Y ahora supongo que viene la o las preguntas de ¿Y esto para qué me sirve?
o ¿esto se usa en la vida real o es simplemente un delirio de algún matemático desocupado? La respuesta a este tipo de preguntas se respondería en forma genérica
diciendo que, aunque no tenga aplicación inmediata o fuera la consecuencia de un
delirio, por lo menos sirve de ejercicio para que sus cerebros adquieran la estructura
lógica necesaria para manejarse en el entorno informático.
Y… sí, hay que saberlo para el examen, en el sentido de que saber implica no sólo el uso de la memoria como necesario para cualquier aprendizaje, sino haberlo internalizado de forma que se manejen conceptos en lugar de posiciones de
memoria; implica poder resolver situaciones matemáticas que difieren de las vistas y
practicadas en clase.
Existe un sistema compuesto que junta la base de numeración 26 con símbolos tomados del abecedario y el decimal, ambos sistemas están compuestos de 3
dígitos cada uno y se ven de la siguiente forma: FTN 578…¿Les resulta conocido?
Todos los sistemas de numeración que se verán tienen en común la característica de ser posicionales, de modo que las operaciones matemáticas siguen la mecánica aprendida por Uds. en la primaria y responden a un polinomio denominado
“Teorema fundamental de la numeración” (en adelante TFN). Aplicando este teorema
a diferentes bases de numeración se obtiene un resultado único cualquiera sea la base, debido a lo cual podemos suponer que ese valor coincide también para base 10 y
por lo tanto nos servirá para tener un valor conocido con el cual comparar los diferentes sistemas. Este polinomio se expresa de la siguiente forma:
V  a * B m  b * B m1  ..... z * B 0  aa * B 1  ab* B 2  ...... zz * B  n
Las variables en minúscula son los coeficientes de cada término que coinciden con los símbolos del número en cada posición; B representa la base de numeración usada y las potencias guardan relación con la posición que ocupa cada coeficiente en el número considerado. Las potencias negativas implican la inversa de esa potencia, es decir un valor menor que 1 y por lo tanto los términos con coeficientes de
dos letras indican la parte decimal (en el sentido de valores menores que la unidad)
del número considerado.
Veamos dos ejemplos: el primero un número en base 10 y el segundo en
base 8
a) 2340,67(10)
V  2 *103  3 *102  4 *101  0 *100  6 *101  7 *102
V  2000 300 40  0  0,6  0,07  2340,67
b) 734,53(8)
V  7 * 8 2  3 * 81  4 * 80  5 * 8 1  3 * 8 2
V  7 * 64  3 * 8  4 *1  5 * 0,125 3 * 0,015625 476,671875
Por lo visto en párrafos anteriores, 476,671875 es el valor equivalente en
base 10 de 743,53 en octal.
3/ 37
Aplicando este teorema podemos obtener el valor en base 10 de cualquier
número expresado en otra base.
Sistema binario (base 2)
Por razones electrónicas, para las computadoras se adopta una tecnología
que puede tomar sólo dos estados: High (alto) y Low (bajo), también denominados 1
(alto) y 0 (bajo) y por ello se denominan digitales, diferenciándose de esta manera de
otras computadoras que utilizan muchos (eventualmente infinitos) valores posibles
llamadas analógicas. Estas últimas sólo pueden funcionar en ambientes controlados
como laboratorios y por ello se usan casi exclusivamente en universidades para estudios complejos.
Los números utilizados en las primeras PC se componían de 8 dígitos, cada
dígito se denominó bit (binary digit) y el conjunto de 8 bits se llama Byte. Con las mejoras de la tecnología se crearon microprocesadores que podían manejar 16 bits y trataron de darle el nombre de Word (palabra) a este conjunto, pero finalmente no tuvo
aceptación y quedó el Byte como unidad de información para las PC. En algunos textos puede aparecer este vocablo asociado a un microprocesador en particular y entonces no sería extraño leer que tal micro tiene una palabra de 16 o de 32 bits, es decir
que puede manejar 16 o 32 bits componiendo un solo número con lo cual se obtiene la
posibilidad de trabajar con valores más grandes.
Apliquemos lo visto hasta ahora para obtener el valor de un número binario:
10110010( 2)
V  1* 2 7  0 * 2 6  1* 25  1* 2 4  0 * 23  0 * 2 2  1* 21  0 * 2 0
V  128  0  32  16  0  0  2  0  178
Analicemos un poco algunas características de los números binarios:
a)
todas las potencias de 2 mayores que 0 dan valores pares, o sea que
esencialmente son pares, la única posibilidad de obtener uno impar
es que el coeficiente de la potencia 0 sea no-nulo, En el ejemplo vemos que el dígito de la derecha es cero, con lo cual no se suma la
unidad (20) y por lo tanto resulta par. Si nuestro ejemplo hubiera sido
10110011(2), el valor sería de 179 (impar).
b)
El 10 representa la base: 10(2) = 2; (como en todas las otras bases:
10(8) = 8; 10(16) = 16; etc.)
c)
Si quisiéramos obtener el doble de un valor, deberemos multiplicarlo
por la base, o sea agregarle un cero a la derecha del número primitivo.
Es un caso similar que cuando en el sistema decimal queremos obtener diez veces un valor, agregamos un cero a la derecha. En el caso
de querer obtener la mitad, corremos la coma decimal un lugar hacia
la izquierda, en forma análoga a obtener la décima parte de un valor
expresado en base 10.
d)
Como los coeficientes sólo pueden tomar los valores 0 o 1, es muy
sencillo aplicar el TFN a un binario si uno recuerda los valores de las
diferentes posiciones de 2n, recorriendo el número de derecha a izquierda, es decir desde el dígito menos significativo hacia el más significativo.
4/ 37
Aplicando esto a nuestro primer ejemplo tendríamos que sumar las posiciones 1, 4, 5, 7 (comenzando a contar desde cero) con lo que obtendríamos
que el valor es 2+16+32+128.
Cómo obtener un binario a partir de uno base 10
Primer método: Divisiones sucesivas.
Este método consiste en dividir por la base (en este caso 2), tomando en
cuenta sólo la parte entera de la división hasta obtener un resultado de 0. El número
deseado se forma tomando los restos de las divisiones, colocándolos en orden inverso
al que fueron apareciendo en la operación. Este método sirve para pasar desde base
10 a cualquier base.
Ejemplo: Necesitamos transformar el número 34(10) a binario.
34/2 = 17
17/2 = 8
8/2 = 4
4/2 = 2
2/2 = 1
1/ 2 = 0
resto
resto
resto
resto
resto
resto
0
1
0
0
0
1
de acuerdo a lo antedicho, el número buscado es 100010 (2)
Para comprobar que no cometimos errores, aplicamos el TFN al número hallado. Si está bien, el valor del TFN debe ser 34.
V = 1*21 + 1*25 = 2 + 32 = 34
Segundo método: Restas sucesivas
En este caso el número buscado se obtiene restando sucesivamente potencias de 2, comenzando desde la mayor potencia posible. Si se puede restar, el coeficiente del número para esa potencia de la base es 1, en caso contrario es 0.
Usaremos el mismo ejemplo anterior:
A 34 puedo restarle 32 = 25, entonces en la 6ª posición va un 1 y me queda
como resto 2.
A 2 puedo restarle 2 = 21, así que en la 2ª posición va otro 1, todas las demás posiciones se completan con ceros. Recordar que las potencias de la base comienzan con 0 y se incrementan hacia el dígito de mayor peso (izquierda).
Estadísticamente hablando, el segundo método es más corto y tiene menos
posibilidades de error al utilizar una operatoria más sencilla que la división; en contrapartida, para números de gran valor se necesitará una tabla con las potencias de la
base en orden creciente, ya que en general es fácil recordar hasta la 10ª potencia pero
no mucho más.
Tips & Tricks
La parte entera de un binario que representa un valor par debe terminar en
cero.
5/ 37
Para multiplicar un binario por potencias de la base se deben agregar ceros
a la derecha del mismo en una cantidad igual al exponente de la base por la cual estamos multiplicando; para dividirlo se correrá la coma decimal hacia la izquierda una
cantidad de lugares acorde con la potencia de la base. Esto es lo mismo que decir que
cuando agregamos un dígito a un número en base binaria duplicamos el rango de representación de ese número.
Como el sistema binario sólo tiene coeficientes de cero y uno, el TFN es
más fácil de aplicar que en otros sistemas y basta con poner arriba del número el
equivalente decimal de la posición y sumar los que tienen coeficiente uno.
Ej.:
64 32 16 8 4 2 1
1 0 1 0 0 1 1 (2) = 64+16+2+1 = 83
El valor de un binario constituído por N unos es 2N -1.
El valor de un binario constituído por un uno y N ceros es 2 N.
Sistema octal (base 8)
Este sistema tiene ocho símbolos que, por convención se toman del 0 al 7.
El método para pasar de base 10 a base 8 es el de divisiones sucesivas,
igual que en el caso de binarios se toma en cuenta sólo la parte entera de la división y
el número transformado se obtiene tomando los restos de las divisiones.
La transformación de base 8 a base 10 se realiza con el TFN, igual que en el
caso de binarios, teniendo en cuenta que ahora los coeficientes podrán tomar valores
entre cero y siete.
Tomemos el ejemplo del 83 para transformarlo a octal, lo que nos dará una
relación interesante para realizar la operación conociendo el valor en uno de los dos
sistemas, ya que las bases 2 y 8 pueden relacionarse en potencias de 2 (8 = 2 3).
83/8 = 10
10/8 = 1
1/8 = 0
resto 3
resto 2
resto 1
Entonces 83 (10) = 123 (8)
Si quisiéramos comprobar que lo obtenido es correcto, aplicamos el TFN a
123 y vemos qué da:
3*80 = 3
2*81 = 16
1*82 = 64
Valor = 64 + 16 + 3
Total 83 . El resultado es correcto, entonces 123(8) representa un valor de
83.
Ahora, ya que 8 = 23, sabiendo el número en binario y tomando grupos de
tres dígitos comenzando de la derecha nos quedaría:
Ej: 001 010 011
6/ 37
Aplicando el TFN a cada grupo de números tenemos
001 = 1; 010 = 2; 011 = 3 ; entonces queda 123. De forma similar, sabiendo
el octal podríamos transformarlo en binario usando cada dígito del octal para obtener
tres dígitos del binario.
Sistema hexadecimal (base 16)
En este sistema se complican un poco los símbolos a utilizar, ya que sólo
disponemos de diez conocidos. Nuevamente, por convención, se toman estos diez
primeros (del 0 al 9) y se le agregan las seis primeras letras del abecedario (A a la F).
Recordar que el símbolo más grande representa el valor de la base menos uno, como
en todos los sistemas anteriores.
Nuevamente, para pasar de base 10 a base 16 se divide sucesivamente por
16 y para la transformación inversa se utiliza el TFN.
Como esta base está relacionada con la base binaria (16 1 = 24), también podemos utilizar el método abreviado para el pasaje de binarios a hexadecimal y viceversa, sólo que aquí deberemos formar grupos de cuatro dígitos en lugar de tres (la
relación entre los exponentes de las bases).
SI el número fuera racional (compuesto por parte entera y fraccionaria), se
puede usar el TFN para pasarlo a base diez y luego a base 16 o puedo llevarlo a una
notación exponencial, trabajarlo como entero y luego volver a su valor original:
Supongamos tener el valor A5F4,DE(16)
A5F 4, DE *162 *162  A5F 4 DE *162  A5F 4 DE * (2 4 ) 2  A5F 4 DE * 2 8
 1010010111
1101001101
1110* 2 8  1010010111
110100,11011110
El resultado confirma que se puede pasar un racional en hexadecimal a binario en forma directa generando grupos de cuatro dígitos tomando como punto de
partida la posición de la coma decimal hacia la izquierda y hacia la derecha.
Haciendo las divisiones nos queda:
83/16 = 5
5/16 = 0
resto 3
resto 5
El número 83 queda como 53(16).
Desde el binario formaríamos: 0101 0011 que representan las combinaciones de 5 y 3 respectivamente.
Otras bases de numeración
Si tenemos en cuenta el ejemplo visto, deberíamos sacar la conclusión de
que para un valor numérico determinado, cuanto mayor es la base, menos dígitos necesito para representarlo. Esto puede ser una razón para usar bases de numeración
diferente a la tradicional, otra razón podría ser un tipo de “encriptación”, es decir dificultarle a otras personas saber el valor de un número.
Como ejemplo del primer caso, tenemos una base alfabética que, sin tener
en cuenta símbolos propios del castellano como ser las vocales acentuadas o las dié-
7/ 37
resis, o la ñ, podemos usar una base 26 en donde utilicemos sólo símbolos del alfabeto asignándoles valores sucesivos A = 0; B = 1; C = 2;…….Z = 25.
En este sistema, el mayor valor que podremos representar con tres dígitos
es 263 – 1 = 17.575 contra el mayor valor obtenible con base 10 para tres dígitos que
es 999.
Pongamos como ejemplo la patente de un auto: EGI 689 ….¿Qué valor en
nuestro sistema tradicional tendrá, suponiendo los tres últimos dígitos en el sistema
decimal?
Apliquemos el TFN:
Valor  E * 265  G * 264  I * 263  6 *102  8 *101  9 *100
E=4
G=6
I=8
4 * 11.881.376 = 59.406.880
6 * 456.976
= 3.198.832
8 * 17.576
=
158.184
Valor = 62.763.896 + 689 = 62.764.585
Para llegar a este rango de valores utilizando el sistema de base 10 necesitaríamos 8 dígitos. El mayor valor al que llegará este sistema es: 321.255.127. Comprobarlo.
Hasta aquí, nos hemos ocupado de operar con una parte de la clasificación
de los números que es la de los Naturales, debemos seguir entonces agregando el
cero y los negativos para completar los Enteros.
Números negativos
Aunque algunos autores no coincidirían conmigo, vamos a usar en este curso dos métodos de representación solamente para enteros negativos. Estos métodos
son dos variantes del llamado “Complemento”: a) Complemento a la base (C-B) y b)
Complemento a la base-1 (C-b), ambos están relacionados como:
(C-B) = (C-b) + 1
a) Complemento a la base (C-B)
Las operaciones matemáticas con números posicionales son métodos mecánicos que se resumen en ir agregando unidades hasta que se llegue a la base y en
ese momento restar la base para agregarla a la columna de la izquierda. Alguien podría criticar el hecho de haberme referido a la suma, pero esto tiene sustento en que
las operaciones matemáticas (todas) derivan de la suma.Tan cierto es esto que se diseñaron máquinas mecánicas para hacer las operaciones básicas (suma, resta, multiplicación y división) y las máquinas son incapaces de abstracción.
Considero que para el concepto siguiente, lo más sencillo es imaginar una
rueda que tenga marcados los símbolos del 0 al 9.
Parto del valor 4. Si giro la rueda hacia la izquierda dos posiciones llego al 6,
o sea sumé 2 unidades. Si giro hacia la derecha dos unidades llego al 2, resté dos
unidades. Ahora, para llegar al dos puedo girar hacia la derecha (resta) o hacia la izquierda 8 unidades (suma) y el resultado es el mismo.
8/ 37
5
Resta
9
0
9
0
4
3
6
0
3
4
7
9
2
2
1
1
8
8
5
7
0
3
5
1
2
4
7
4
6
3
9
1
Suma
6
1
5
2
8
2
4
7
9
7
3
6
8
6
2
5
1
4
0
3
5
6
7
8
8
9
0
Resumiendo, entonces, para hacer una resta hago la suma del complemento del valor a restar, es decir si quiero restar 2 puedo sumar 8 (10-2); puedo suponer
entonces que 8 representa al -2 ya que la operación sería 4 + (-2) y el (-2) estaría representado por el 8.
Lo que hemos hecho no es mágico, en realidad se expresaría de la siguiente
forma:
R  42
R  4  (10  2)  4  2  (10  10)
La “trampa” está en el último término de esa ecuación que implica restar la
base y que fue hecho sin tener en cuenta que la rueda, al pasar por cero haría girar a
la siguiente una unidad (decenas) como indica el tercer término. Si asumimos que R
es el resultado, M es el minuendo, S el sustraendo y n la cantidad de dígitos con la
que trabajamos quedaría:
R  M  (10n  S )  M  (Cb S )  M  S  10n  10n
En este método siempre hay que restar 10n.
Ejemplo: En este caso n = 2
R= 89 – 56 = 33
R= 89 + 44(c-10) = 133
-56
(100-56) = 44 (c-10)
2
133 – 10 = 33
Para obtener el complemento a la base (C-B) se debe recorrer el número
desde la derecha y sacar de la primera columna (unidades) la diferencia hasta la base
(10 en este caso) y luego las demás columnas su diferencia a la base-1 (9 en el ejemplo). Si el número terminara en cero, se deja esta columna con cero y se obtiene el
complemento a la base de la segunda columna y el resto con el complemento a base1.
Tips & Tricks
9/ 37
Para sacar el complemento a la base en binario deben tener el número pasado a binario como si el valor fuera positivo, luego se recorre el número binario de
derecha a izquierda repitiendo los dígitos hasta el primer uno inclusive, los restantes
se complementan (cambio de cero por uno y viceversa) hasta terminar. Si por la operatoria el complemento debe tener más dígitos, se pueden agregar unos hacia la izquierda en la cantidad que haga falta, estos unos no cambian el valor del complemento.
b) Complemento a la base – 1 (C-b)
El método es muy parecido al anterior, salvo que acá se define de cada columna la diferencia a la base-1; es más sencillo de obtener el complemento y no hay
casos particulares como en complemento a la base. Como contrapartida, al resultado
hay que sumarle 1, además de restar 10n.
Usemos el mismo ejemplo anterior:
R= 89 – 56 = 33
R= 89 + 43(c-9) = 132
-56
(99-56) = 43 (c-9)
132 – 102 + 1 = 33
El sistema de representación por complementos tiene varias ventajas, sobre
todo para números binarios porque es extremadamente rápido obtener el (C-b), es
más sencillo hacer la operación de suma que la de resta y además no hay diferencias
en la operatoria si el resultado fuese negativo (M < S). Probemos esto matemáticamente: llamaremos R al resultado de la operación, M al minuendo, S al sustraendo, S’
al complemento y R’ al complemento del resultado.
Analizaremos tres casos a) M > S por lo tanto R es positivo
b) M = S por lo tanto R = 0 (también positivo)
c) M < S por lo tanto R es negativo
R M S
R  M  S '  M  (b n  1  S )  M  S  (b n  1)  (b n  1)
R  M  S  (b n  1)  b n  1
R  R'  bn 1
Los casos a) y b) resultan cuando R’ >= (bn – 1) y en el caso c) R’ < (bn – 1)
Resultado +
R = R’ – bn + 1
Resultado –
-R = R’ – bn +1
-R = R’ – (bn – 1)
R = - R’ + (bn – 1)
R = (bn – 1 ) – R’
10/ 37
El segundo término de la ecuación es lo que habíamos definido como (C-b),
entonces el resultado va a ser menor que (bn-1), lo que indicará que el resultado es
negativo y el valor se obtiene complementando el resultado. Hagamos un ejemplo:
53 – 78 = - 25
53 + 21(C-9) = 74
R = 74(C-9) = - 25
R = - 25
74 < 99
Tips & Tricks
Para obtener el complemento a uno de un binario hay que disponer primero
del binario obtenido como número positivo y luego cambiar unos por ceros y viceversa.
Como en el caso del otro complemento, si hay que agregar dígitos se pueden agregar
unos a la izquierda en la cantidad necesaria.
Sistemas de representación para enteros positivos y negativos
A partir de acá, nos vamos a centrar en representación de binarios y retomaremos las diferentes bases en la operatoria matemática.
Todos estos sistemas pueden representar el signo (de una u otra forma) y
para ello se requiere de algún recurso, esto hace que el rango de la representación
sea menor que en el caso de métodos sin signo o con signo implícito (positivo).
Módulo y signo
Este método es el más intuitivo, aunque se usa poco por tener doble representación del cero (aunque sea una característica deseable con determinadas operaciones), para usar el método se reserva el bit de mayor peso (MSB most significant bit)
que es el de la izquierda para el signo y por convención se usa el cero para los positivos y el uno para los negativos. Como perdemos un bit en el signo, el rango de representación de este método es la mitad que uno convencional sin signo.
Usando 8 bits, el rango de representación sería:
Máximo positivo:
Cero positivo
Cero negativo
Máximo negativo
01111111
00000000
10000000
11111111
+127
+0
-0
-127
Con 8 bits tenemos posibilidades de representar desde el cero hasta el 255,
o sea 256 (28). En este sistema tenemos 254 (+- 127) más dos para el cero = 256.
Exceso a 2n-1
Por favor, fijarse que n-1 es el exponente de la base, eso implica que estamos sacando uno de los dígitos.
En este caso se trata de desplazar el cero a la mitad de la recta numérica
que implica 2n. Deberemos distinguir entre el valor a representar y el valor representado, porque no hay nada que indique qué sistema estamos utilizando. Si llamamos v
al valor que quiero representar con este método, v’ será el valor binario que puedo leer,
ambas están relacionadas como:
11/ 37
v’ = v + 2n-1
El rango de representación será entonces
Máximo positivo
Cero
Máximo negativo
v’ = 11111111
v’ = 10000000
v’ = 00000000
v = +127
v=0
v = -128
Metodológicamente conviene hacer esta traslación en sistema decimal y
luego usar alguno de los métodos vistos para pasarlo a base 2.- Ej.:
Necesito representar el +48, aplicando la fórmula para n=8 queda:
V’ = 48 + 128 = 176
v’ = 10110000(2)
Si el valor hubiera sido -48, el resultado sería:
V’ = - 48 + 128 = 80
v’ = 01010000
En forma gráfica, sobre la recta numérica, este método quedaría:
Método Exceso
-128
-48
0
+48
+127
0
80
128
176
255
Representación binaria
Para llegar a representar los valores comunes, debemos poder hacerlo hasta los Complejos, en este curso sólo llegaremos a los Racionales. Falta entonces ver
cómo representar los Fraccionarios y luego juntar las de los Enteros para tener los Racionales.
Representación de Fraccionarios
Este tipo de números son los que figuran con coeficientes dobles y exponente negativo en el TFN. Cabe aclarar que el TFN contempla a los números Racionales
12/ 37
expresados en forma de número decimal, es decir aquellos que tienen una parte entera y una fraccionaria (menor que la unidad).
Como en el caso de los enteros, podemos usar dos métodos de transformación: a) Multiplicaciones sucesivas y b) Restas sucesivas. El segundo método es exactamente igual al de los enteros, sólo que en este caso trabajaremos solamente con la
parte fraccionaria del número.
Multiplicaciones sucesivas
Consiste en tomar la parte fraccionaria del número en cuestión e irla multiplicando por la base (en este caso nos referiremos a 2); a ese resultado le quitaremos
la parte entera y esos dígitos formarán nuestro binario.
Cabe señalar que TODOS LOS ENTEROS TIENEN REPRESENTACIÓN
EN BINARIO, en cambio los fraccionarios no la tienen necesariamente, sólo pueden
ser representados por un binario de infinitos dígitos (físicamente imposible) o bien tendremos que aceptar un error en la representación. Este error dependerá de las precisiones con las que estemos trabajando y las posibilidades de hardware disponibles.
Es necesario acotar el error para poder trabajar matemáticamente con él, en
la mayoría de los casos concretos este error será un dato para poder hacer la representación.
Ejemplos:
Pasar 0, 75 a binario con ε<2-5
0,75 * 2 = 1,50
0,50 * 2 = 1,00
0,00 * 2 = 0,00
1
1
0
Obviamente siguen todos ceros, o sea que no tenemos error en el binario
El número buscado es 0,11000
Pasar 0,88 a binario con ε<2-9
0,88 * 2 = 1,76
0,76 * 2 = 1,52
0,52 * 2 = 1,04
0,04 * 2 = 0,08
0,08 * 2 = 0,16
0,16 * 2 = 0,32
0,32 * 2 = 0,64
0,64 * 2 = 1,28
0,28 * 2 = 0,56
1
1
1
0
0
0
0
1
0
El problema pide Error < 2-9, de modo que nuestras cuentas terminan acá.
Demostrar que hallando 9 coeficientes, el error es menor que 2 -9.
De no haber existido el dato del error la conversión sólo terminaría al llenarse la cantidad de bits asignados a ese número (error limitado por hardware). Como
curiosidad ponemos el valor con error menor que 2-40. Este número no tiene represen-
13/ 37
tación exacta como el anterior, porque se ve cierta periodicidad en la transformación,
con lo cual es esperable que nunca se llegue al valor buscado sin error:
0,88 ≈ 0,1110000101000111101011100001010001111010 (2)
Restas sucesivas
Como en el caso de los enteros, habría que disponer de una tabla con las
potencias negativas de la base. Es preferible usar multiplicaciones sucesivas por la
sencillez de la operación.
Pasaje de Racionales a binario
Matemáticamente las operaciones de pasar a binario y de binario a base 10
(a través del TFN) son complementarias y ya que el TFN es una suma de términos, es
posible transformar primero la parte entera y luego la fraccionaria y sumar ambas para
obtener el resultado.
Ejemplo. Obtener el binario de 78,34 con ε<2-9
78
0,34
78,34(10)
100110
0,010101110
100110,010101110(2) ε<2-9
Lo visto hasta ahora se refiere a números decimales, es decir con punto
(coma decimal para nosotros) variable, ya que el operador o eventualmente el Sistema
Operativo definirán la posición del punto que separa parte entera de fraccionaria.
Hay otro sistema en el que se conviene la posición de este separador y
además se aprovecha la notación exponencial para poder representar valores muy
grandes y muy chicos.
Punto flotante Simple y doble precisión
Notación exponencial
Para representar un valor muy grande cuando estamos limitados por la cantidad de dígitos es usar este tipo de notación que usa potencias de la base. El número
ahora estará compuesto de una mantisa y el exponente de la base, por lo tanto el valor
será:
V = Mantisa * Base Exponente
Si quisiéramos representar el valor 98.567.987.534.295 podemos usar la notación exponencial como sigue:
98567987534295 = 9,8567987534295 *10+13 = 0,98567987534295 * 10+14
Tenemos 8 posiciones. El problema es cómo representar ese número en 8
posiciones.
La solución sería:
14/ 37
9,8 *10+13
Pero estamos desperdiciando dos lugares para la base que
ya sabemos es 10, entonces una solución mejor es:
9,85E+13
La indicación de que es una notación exponencial es necesaria sólo si debemos identificarla de otras, si yo determino alguna forma de saber que
tal formato corresponde a notación exponencial podríamos sacar la E:
9,856+13
Mejoró nuestra precisión. Pero se puede hacer más: si convenimos que usaremos sólo números fraccionarios para la mantisa podemos eliminar
la coma decimal suponiendo que está siempre ubicada antes del número más significativo:
,98567+14
Como corrí la coma hacia la izquierda, debo aumentar el
exponente para seguir cumpliendo con el valor.
Este tipo de mantisa se denomina normalizada.
Errores
Se define Error relativo a la diferencia entre el valor de representación menos el valor verdadero dividido el valor verdadero; si a este error lo multiplicamos por
cien, obtendremos el error relativo porcentual. En lenguaje matemático sería:
r 
Vrep  Vverd Vrep

1
Vverd
Vverd
 Vrep

 1 *100
 Vverd 
r %  
El error va a tener un signo que indicará si es un error por defecto o por exceso. Calculemos el error cometido en la representación anterior:
 r  -0,0000100
18813610
 r  0,001%
Desde el punto de vista de un ingeniero, ese error es un lujo para cualquier
cálculo, sin embargo si Uds. lo piensan desde un lugar diferente, las cosas no son tan
lindas como parecían. Supongamos que Uds. depositan $98.567.987.534.295 en un
banco que está informatizado, con lo cual ese monto se guarda en punto flotante ocupando 8 posiciones. Si Uds. decidieran retirar el dinero al día siguiente les darían
98.567.000.000.000. ¿Estarían satisfechos?
Este método tiene errores relativos cambiantes según el exponente usado,
cuanto más grande el exponente, más grande el error.
Punto flotante simple precisión
15/ 37
Es un método de representación que sirve para números Racionales, tanto
positivos como negativos, en general se usa para valores muy grandes o muy pequeños en donde necesitaríamos muchas posiciones para los dígitos; el precio a pagar es
el error, que es propio del método.
Consiste en una “máscara” (lugares predeterminados para los dígitos) que
se compone de un bit para el signo, ocho bits para el exponente y veintitrés para la
mantisa.
Signo
Exponente
Mantisa
La mantisa debe ser normalizada a un número fraccionario, el exponente se
convino en representarlo como Exceso y el bit de signo sigue las convenciones de ser
1 para negativos y 0 para positivos. La base es 2.
Normalmente se parte de un número expresado en base 10 y se pide
la representación en punto flotante. Hay que pasarlo a binario, normalizar (dejar
un número fraccionario con el primer dígito significativo) y hallar el exponente.
El error está acotado por las posiciones de la mantisa que son en este caso 23;
la máscara ocupa 32 bits en total (4 Bytes).
Ejemplo: Representar en PFSP el 67456,87
a)
b)
c)
d)
A binario
Normalizar
Signo
Exponente
10000011110000000,1101111010111000010100
0,100000111100000001101111010111000010100 * 2+17
0 porque es positivo
(Exceso 128) Exp = +17 + 128 = 145(10)
10010001(2)
PFSP:
0
1
0
0
1
0
0
0
1
Esto se lee:
1
0
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
1
1
0
1
+ 0,10000011110000000110111 * 2+17
El rango posible de representación de este método será:
Máximo positivo ≈ 1 * 2+127
Mínimo positivo ≈ 2 -23 * 2 -128 ≈ 2 -151
Mínimo negativo ≈ - 2 -151
Máximo negativo ≈ - 1 *2 +127
Cero (doblemente representado por cada signo)
Hay números mayores tanto positivos como negativos que no se pueden representar con este sistema, el espacio de la recta numérica desde 2 +127 hasta infinito
se denomina Desbordamiento y puede ser positivo o negativo. Entre 0 y 2 -151 tampoco se pueden representar, esta parte de la recta numérica se llama Subdesbordamiento y, como el sistema es simétrico, puede ser positivo o negativo.
16/ 37
1
1
-2 +127
-2 -151
2 -151
2 +127
0
∞
-∞
Desbordamiento -
Subdesbordamiento
Desbordamiento +
Está definido por la IEEE un estándar que lleva el número de protocolo 754,
muy parecido a esta forma, con algunas pequeñas diferencias:
a)
Ya que la mantisa siempre queda normalizada de la forma 0,1xxxx,
podemos eliminar este primer 1 de la mantisa y considerarlo “bit implícito”. Esto deberá afectar el valor del exponente.
b)
El exponente se toma como Exceso a 127 (en lugar de 128)
c)
Se definen infinitos positivos y negativos poniendo el exponente en
255 y la mantisa en cero.
d)
Se pueden representar números sin normalizar poniendo el exponente en cero y la mantisa ≠ 0.
Punto flotante doble precisión
En lo que se refiere al método de transformación, este sistema es igual al
simple precisión. Lo que cambia son los lugares asignados para el exponente que en
este caso son diez en lugar de ocho y la mantisa tiene cincuenta y tres lugares en lugar de los veintitrés, esto hace que ocupe 64 bits u ocho Bytes. Al cambiar el exponente, este sistema puede representar números más grandes y más chicos que el anterior,
aunque lo más importante es que la mantisa puede contribuir a bajar el error por tener
más del doble de dígitos que el anterior.
El rango de representación será:
Máximo positivo ≈ 1 * 2+511
Mínimo positivo ≈ 2 -23 * 2 -512 ≈ 2 -535
Mínimo negativo ≈ - 2 -535
Máximo negativo ≈ - 1 *2 +511
Cero (doblemente representado por cada signo)
Códigos binarios
Se entiende por código una representación unívoca de las cantidades (valores) de tal forma que, a cada una de ellas se asigna una combinación de símbolos determinada y viceversa. Los sistemas de representación vistos constituyen entonces
códigos.
El primer código es el denominado Binario natural, que es el que usamos en
los métodos de representación. Nos referiremos a códigos de cuatro bits porque son
los más utilizados como representación final de las operaciones matemáticas o alfanuméricas antes de mostrar el valor al operador.
EL segundo es el denominado BCD natural, es igual al binario natural, salvo
que sólo se define hasta el valor 9, el resto de las combinaciones hasta 15 no están
permitidas (Tabla 1).
17/ 37
Cuando nos referimos al binario y su relación con el TFN, asumimos que
cada columna tenía los pesos 1, 2, 4, 8. Para representar diez valores podemos usar
otros pesos como usa el Aiken, en el que se define cada columna con 1, 2, 4, 2 (Tabla
1).
Deci
mal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
Binario
Natural
0 0
0 0
0 1
0 1
1 0
1 0
1 1
1 1
0 0
0 0
0 1
0 1
1 0
1 0
1 1
1 1
BCD
Natural
0 0
0 0
0 1
0 1
1 0
1 0
1 1
1 1
0 0
0 0
0 0
1 0
0 0
1 0
0 0
1 0
0 0
1 0
0 1
1 1
0
1
0
1
0
1
Tabla 1
0
1
0
1
0
1
0
1
0
1
0
0
0
0
0
1
1
1
1
1
BCD
Aiken
0 0
0 0
0 1
0 1
1 0
0 1
1 0
1 0
1 1
1 1
0
1
0
1
0
1
0
1
0
1
El uso de estos códigos es bastante intuitivo: el número decimal que queremos representar se hace por columnas, colocando el código binario correspondiente a
cada una de ellas, por ejemplo: queremos representar el 847(10)
Base10
Binario Natural
BCD Natural
BCD Aiken
8
1000
1000
1110
4
0100
0100
0100
7
0111
0111
1101
Códigos alfanuméricos
De los numerosos códigos inventados, el que se usa prácticamente en todas
las computadoras comunes es el que propuso la American Standard Code for Interchange Information, conocido como el código ASCII. Originalmente era un código de 6
bits y posteriormente lo extendieron a ocho bits.
Si quieren conocer el código busquen por Internet.
Códigos detectores/correctores de errores.
En cualquier transmisión de información existe la posibilidad de que uno o
más bits de un número lleguen al extremo receptor con su valor cambiado, ya sea por
18/ 37
ruidos eléctricos o por falla en la línea de transmisión. Veremos sólo dos códigos como
para entender el concepto.
Supervisar y /o corregir requiere de más recursos que los indispensables para transmitir la información, en el caso de los binarios habrá que agregar bits (información) al dato transmitido para poder luego verificar errores, esto hace que perdamos
eficiencia (velocidad) en la transmisión; es decir ganamos en seguridad pero perdemos eficiencia. Es difícil sacar un cálculo de cuánta seguridad es económicamente
compatible con la pérdida de eficiencia. Para los protocolos de Internet se llegó a un
equilibrio interesante agregando detectores de error que influyen menos en la eficiencia y, una vez detectado un error, volver a transmitir el paquete que antes estuvo afectado por el error (paquete dañado: Damaged Packets).
Estos códigos tratan en general de contar las veces que se repite el valor de
cero o de uno en el dato transmitido. Por ello surgen variantes que tienen en cuenta
qué bit se va a comprobar y si lo correcto es que se repita una cantidad par o impar de
veces. Con dos variables tendremos cuatro combinaciones Paridad par de unos; Paridad par de ceros; Paridad impar de unos y Paridad impar de ceros. El operador que
inicia la transmisión puede usar cualquiera de estas combinaciones, nosotros usaremos normalmente Paridad par de unos (perche me piace).
El más sencillo es agregar un bit que se denomina “de paridad” a la información, habitualmente usado en transmisiones serie y se agrega uno por cada Byte (pérdida de eficiencia de un 12%). Este código detecta un número impar de errores, si hubiera dos o cuatro no detectaría nada.
El que sigue es un poco más complicado, pero tiene la enorme ventaja de
detectar dos o más errores y corregir el bit erróneo si hubiese uno sólo. Se llama Código Hamming y se implementa de la siguiente manera:
a)
La cantidad de bits de paridad deben ser suficientes para identificar la
posición dentro de los dígitos que conforman el dato con más los bits
de paridad. Si tenemos un dato de 7 bits, harían falta tres de paridad;
pero nuestro dato ahora estaría formado por 7 + 3 = 10 bits, con lo
que tres de paridad no alcanzan, se deben usar cuatro.
b)
Los bits de paridad ocupan las posiciones múltiplos de 2 n, es decir las
posiciones 1, 2, 4, 8, etc. (Pn en el ejemplo)
c)
Los datos van intercalados en las columnas restantes. (dn en el ejemplo)
d)
Se arman cantidad de filas acorde a la cantidad de bits de paridad
e)
El bit de paridad uno actuará sobre las columnas impares, el dos sobre las columnas 2y3; 6y7; 10y11; etc.
f)
Se calcula el valor de cada bit de paridad comenzando por la fila más
alta.
g)
Se compone el dato definitivo.
Si bien parece complicado de hacer, electrónicamente es muy sencillo y muy
rápido porque se hace por hardware en la capa de transmisión, tanto en el transmisor
como en el receptor. En este caso la pérdida de eficiencia es de un 50%, pero al ser
de carácter exponencial, para grandes cantidades de bits la pérdida es menor: si tuviéramos un dato de 1000 bits harían falta sólo 10 de paridad.
19/ 37
Posición
Bits asociados
F1
F2
F3
F4
1
P1
1
Número sin errores
1
2
P2
0
0
3
d1
1
1
1
4
P3
5
d2
0
0
0
0
0
6
d3
0
0
0
7
d4
0
0
0
0
8
P4
9
d5
1
10
d6
0
11
d7
1
1
12
d8
0
1
0
1
0
0
0
1
0
1
0
Se deja a los alumnos la experiencia de cambiar el valor de un bit, recalcular
las paridades y verificar que el código obtenido de la paridad da la posición del error y
sabiendo la posición se puede corregir. Este código sólo puede corregir un error.
Operaciones matemáticas
Suma de binarios
El método usado para sumar es el mismo que practicaron durante años, lo
único que deberían grabar es que la base es diferente.
Se alinean los sumandos por la coma decimal y luego se comienza a sumar
desde la columna de la derecha hacia la izquierda agregando unidades a las columnas
de mayor peso a medida que completamos la cantidad de la base. Debe recordarse
que cada columna tiene el doble del valor que la de su derecha.
66,125
+ 17,25
30,25
17,75
131,375
1011111,1
1000010,001
+
10001,01
11110,01
10001,11
10000011,011
Los números azules que están en el rectángulo son unidades que provienen
de la columna anterior al llegar o superar esa columna el valor de la base. El rojo proviene de dos columnas anteriores, en donde llego a sumar 4, lo que implica dos unidades en la columna siguiente o una ubicada dos columnas a la izquierda (en este caso
sumé uno dos columnas desplazado).
La línea naranja indica la cantidad de columnas destinadas a esta suma, o
en la realidad indicaría la cantidad de bits que poseen los registros involucrados en la
suma; el uno que está a la izquierda se denomina CARRY y es un dígito extra que todos los procesadores poseen porque la suma puede contener como resultado un bit
más que la cantidad de bits de los sumandos.
Resta de binarios
Tal como el caso anterior, el mecanismo es igual al que Uds. conocen, con
la excepción de que la base vale 2, esto hace que si debo sacar unidades de las columnas de la izquierda esas unidades valgan 2, 4, 8, etc. Dependiendo de qué columna las saque.
20/ 37
1
022
_30,25
17,75
12,50
_ 11110,01
10001,11
01100,10
Tips & Tricks
Si deciden probar cómo se sumaría usando Punto Flotante, les aconsejo
que desnormalicen uno de los sumandos e igualen los valores de los exponentes para
luego efectuar la suma ( Apéndice C).
Hasta acá, nada nuevo (espero). Ahora vamos a emplear la posibilidad de
restar haciendo la operación de suma a través de la representación del sustraendo
como número negativo en complemento (tanto a uno como a dos).
Sugiero rever el capítulo de complementos.
Utilizando (C-1)
-17,75
10001,11(2)
01110,00(c-1)
_11110,01
01110,00
101100,01
El carry indica que el resultado es positivo y no se tiene en cuenta para el
resultado. En (C-1) hay que sumar una unidad para tener el resultado, de modo que
queda:
0110,01
+
1
0110,10
Utilizando (C-2)
-17,75
10001,11(2)
01110,01(c-2)
11110,01
+01110,01
101100,10
En este caso no hay que sumar nada y el resultado queda como está (sin
tener en cuenta el carry).
Vamos a hacer un ejemplo en el que el resultado de negativo para ver cómo
se opera. Si utilizáramos la resta convencional tendríamos que intercambiar minuendo
y sustraendo, efectuar la resta y saber que el resultado es negativo.
17,75
-30,25
21/ 37
11110,01(2)
00001,11(c-2)
10001,11
+00001,11
10011,10
No aparece el carry, con lo cual sabemos que el resultado es negativo y, según lo visto en el capítulo de complementos, el resultado se obtiene complementando
lo que nos dio la operación, en este caso sería:
10011,10
Hago (c-2)
01100,10(2)
-12,50(10)
Tips & Tricks
Cuando se usa complemento para operar matemáticamente, TANTO EL
MINUENDO COMO EL SUSTRAENDO DEBEN TENER LA MISMA CANTIDAD DE
BITS.
Multiplicación binaria
En esta operación no hay ninguna diferencia con el método tradicional.
100101,011
x 1001,01
100101011
100101011
100101011
101011001,10111
Tips & tricks
Como el binario sólo tiene coeficientes 0 y 1, cuando debemos multiplicar
por 0 no ponemos todos los ceros, simplemente corremos el multiplicando hacia la
izquierda tantas columnas como ceros haya. Este truco es el que se usará cuando se
efectúe esta operación en assembler el cuatrimestre siguiente.
Si se debe multiplicar por un valor múltiplo del exponente de la base (2, 4,
32, etc) sólo deben agregar ceros al final del multiplicador.
División con binarios
Tampoco hay diferencia con el método tradicional.
Dividendo
Divisor
100101,011
1001,01
Multiplicamos ambos valores por 8 para trabajar sin punto (coma) decimal.
Dividendo
Divisor
100101011
1001010
Operamos en la forma convencional
22/ 37
100101011
1001010
-1001010
100,0000101
01100000
-1001010
1011000
-1001010
1110
Se deja que el lector curioso verifique esta cuenta…(o sea, ¡Háganlo!)
Álgebra de Boole
El álgebra de Boole es toda clase o conjunto de elementos que pueden tomar dos valores diferenciados, que designaremos como 0 y 1 (verdadero y Falso; Alto
y Bajo; etc.) y que están relacionados por dos operaciones binarias denominadas suma y producto lógicos (no se comportan estrictamente como la suma y el producto matemático) que cumplen con los siguientes postulados:
a) a  b  b  a
y
ab  ba
Conmutativas
b) 0  a  a
y
1* a  a
Elementos neutros
c) a(b  c)  ab  ac
y
a  (bc)  (a  b)(a  c)
Distributivas
d) a  a  1
y
a*a  0
Complementación
Se llama postulado a una relación entre los elementos constitutivos de un
sistema que no se demuestran, se toman como verdaderos y se construye a través de
ellos el resto de las relaciones en ese sistema. Los teoremas deben demostrarse a
partir del uso de los postulados, una vez hecha la demostración se pueden usar en la
operatoria sin demostrarlos nuevamente.
Algo más de historia e información en:
http://es.wikipedia.org/wiki/%C3%81lgebra_de_Boole
Para visualizar rápidamente resultados de operaciones complejas se suele
utilizar lo que se denomina “Tabla de Verdad”, que consiste en agrupar en columnas
las posibles combinaciones lógicas de las variables involucradas, agregando otras columnas con operaciones más simples hasta llegar a una columna de resultado que
será combinación de otras. Con este método se pueden probar teoremas cuya operatoria algebraica sea complicada.
Probemos un teorema que expresa:
a  ab  a
a ( a  b)  a
Algebraicamente:
a  1 * a  (1  b) * a  1 * a  ab  a  ab
a  a  ab
23/ 37
Usamos el postulado b) y luego el c)
Con tabla de verdad:
a
0
0
1
1
b
0
1
0
1
ab
0
0
0
1
a+ab
0
0
1
1
Como los valores de a y a+ab coinciden quiere decir que a=a+ab
Un teorema que se usa mucho en electrónica es el de De Morgan que expresa:
a  b  c  ...  a * b * c * d * ...
abcd...  a  b  c  d  ...
y
Las variables con una raya arriba expresan el complemento de.. o la variable
negada o invertida.
A las dos funciones del álgebra de Boole que definimos como producto y
suma lógica, se agrega la inversión o complemento y tienen asignados dibujos para
formar con ellos los denominados circuitos lógicos (formados por compuertas lógicas),
que son la base de los componentes de las computadoras. Los dibujos que adoptaremos y sus tablas de verdad están a continuación:
Compuerta Y (producto lógico) (AND)
a
0
0
1
1
b
0
1
0
1
ab
0
0
0
1
a
0
0
1
1
b
0
1
0
1
Compuerta O (suma lógica) (OR)
a+b
0
1
1
1
Inversor
a
0
1
24/ 37
a
1
0
Por convención, las conexiones de la izquierda son entradas y el de la derecha salida. Nuestra regla para conectar varias compuertas será que NO SE PUEDEN
CONECTAR DOS SALIDAS ENTRE SÍ, el resto de las conexiones están permitidas.
Además de las tres funciones principales ya vistas, existen otras que son derivables de esas tres, pero que por sus características de uso práctico hay que tener
en cuenta:
Compuerta O exclusiva (XOR)
a
0
0
1
1
b
0
1
0
1
aӨb
0
1
1
0
F ( ab )  a b  ab
F ( ab )  a b  ab
Compuerta No-Y (NAND)
a
0
0
1
1
b
0
1
0
1
S
1
1
1
0
Compuerta No-O (NOR)
a
0
0
1
1
b
0
1
0
1
S
1
0
0
0
Las compuertas que vimos son la materialización de lo que se denomina
una Función del álgebra de Boole. Una función del álgebra de Boole es una variable
binaria cuyo valor depende de una expresión algebraica en la que se relacionan entre
sí otras variables binarias por intermedio de las operaciones básicas y se representa
como:
V  f (a, b, c..)
El estado de V dependerá de los estados y relaciones entre a, b, c, ….etc.
Llamaremos término canónico de una función lógica a todo producto o suma
en el cual aparecen todas las variables independientes, sea en su forma directa o
complementada. Si la función está expresada con todos sus términos canónicos será
la expresión de una función canónica.
25/ 37
Dependiendo del modo en el que esté definida la función, los términos estarán relacionados como suma de productos o como producto de sumas; por lo general
se dan relaciones del primer tipo cuando definimos las relaciones para que la función
de 1, el segundo tipo aparece cuando definimos las relaciones para que la función de
0.
La cantidad de términos que podemos llegar a tener en una función es 2 n,
donde n es la cantidad de variables independientes.
Una de las formas de definición que se pueden usar para las funciones lógicas es una tabla de doble entrada en la que se ponen las relaciones entre dos variables y en las casillas de resultado va el valor de la función cuando las variables tienen
el estado indicado. Esta tabla, si se grafica con la característica de que en cada fila/columna varía sólo un bit, se convierte en un diagrama de Karnaugh y se utiliza no
sólo para definir una función, sino para simplificarla.
Se denomina simplificar una función a dejar las combinaciones de las variables necesarias para reproducir el estado de la función; una vez simplificada la función,
sus términos no serán más canónicos porque no estarán presentes todas las variables
en cada uno de ellos.
EL diagrama de Karnaugh se usa con ventajas hasta cuatro variables, con
más cantidad conviene usar otro diagrama que se denomina de Veitch, ambos nombres hacen referencia a sus creadores.
ab
00
01
11
10
00
0
0
X
1
01
0
0
X
1
11
1
1
X
0
10
0
0
X
X
cd
En la zona sombreada están los valores que tomará la función en cada una
de las posibles combinaciones de la cuatro variables. Los valores que aparecen como
X son combinaciones imposibles para esta función, por ejemplo si estuviera trabajando
con código BCD, las combinaciones que representan valores mayores que 9 no existen. En determinados casos estas X pueden ser ceros o unos dependiendo de lo que
convenga para simplificarla.
El diagrama de Karnaugh representa la función canónica siguiente:
f (a, b, c, d )1  abcd  abcd  abc d  abcd
f (a, b, c, d ) 0  (a  b  c  d )(a  b  c  d )(a  b  c  d )(a  b  c  d )(a  b  c  d ) *
* (a  b  c  d )(a  b  c  d )
26/ 37
La primera definición está expresada como suma de productos, ya que la
función que da como salida 1 en una sola de las combinaciones posibles es el producto lógico (compuerta Y) y luego cada una de estas combinaciones (términos de la función) se componen con la suma lógica porque cualquiera de ellas que sea uno, la salida debe ser uno (la suma era ejecutada por la compuerta O).
En la segunda definición se aplicó el teorema de De Morgan para hallar la
función complemento (fijarse que las variables aparecen complementadas respecto del
diagrama).
En ambos casos faltan los términos “prohibidos” por el código BCD, de modo que se debe asegurar que estas combinaciones no estén nunca presentes.
Para implementar esta función con compuertas, es más barato hacerlo para
los unos de la función porque va a tener menos compuertas (menos términos) y quedaría:
Las variables lógicas corresponden a señales eléctricas.
Los puntos indican conexión eléctrica, los cruces no.
La salida es la señal cuyo valor va a coincidir con el de la
función buscada.
En este circuito no está
previsto que las combinaciones de
variables “prohibidas” no aparezcan.
Los circuitos que se pedirán son del tipo combinacional,
es decir que la salida depende del
estado lógico de las variables sin
que intervenga el tiempo, son circuitos estáticos.
Simplificación mediante el diagrama de Karnaugh
El diagrama de Karnaugh representa a una función canónica del álgebra de
Boole y por lo tanto el pasaje entre ambos sistemas es directa: sólo hay que poner en
cada celda del diagrama el valor de la función para esa combinación única de las variables o, desde el diagrama escribir la función teniendo en cuenta que cada término
corresponde a una celda del diagrama. Por la forma de construir el diagrama de Karnaugh, las celdas ubicadas en los bordes se consideran contiguas, de modo que se
pueden agrupar celdas del borde inferior con el superior o con los bordes derecho e
izquierdo, incluso se pueden usar los cuatro vértices como agrupación.
Obtenido el diagrama, se trata de formar grupos de celdas contiguos que
tengan el mismo valor de la función. Los grupos deben ser de 2 n celdas, es decir 2, 4,
8, etc. Se analiza luego este grupo y se identifica la o las variables que cambian su
estado dentro del grupo eliminándolas del término y dejando las invariantes. Si el gru-
27/ 37
po es de dos celdas, se elimina una variable, si es de cuatro celdas se eliminan dos
variables, y así sucesivamente. Es lo mismo que decir que se eliminan tantas variables
como el exponente de 2 que corresponda al número de celdas agrupadas.
Veremos a continuación un ejemplo de simplificación, hay uno más completo
en el apéndice A, en donde se hace en forma paralela la simplificación por Karnaugh y
la algebraica, que, por supuesto, deben dar lo mismo.
Dada la función definida por Karnaugh, simplificarla gráficamente y escribirla
en forma algebraica
ab
00
01
11
10
00
1
0
1
1
01
0
0
1
1
11
1
1
0
0
10
1
1
0
1
cd
Algunos elementos se usan para dos simplificaciones (e vértice izquierdo
abajo y el derecho arriba, esto es lícito pero si se quiere realizar la simplificación algebraica hay que tener en cuenta que los términos abcd y abc d deben figurar dos veces
en la función. Algebraicamente esto no es problema porque a + a = a (ver teoremas en
la parte de ejercitación).
La función canónica y la simplificada quedarán:
f (abcd)  abcd  abcd  abcd  abcd  abcd  abcd  abcd  abc d  abcd  abc d
f (abcd) s  ac  ac  bd
f (abcd) s  (a  c)  bd
Para la segunda simplificación tuve en cuenta que existe una función que da
uno cuando las entradas son diferentes que es la O exclusiva, de modo que reemplacé
dos compuertas AND por una XOR.
En el apéndice B les agrego el informe de un proyecto de sumador binario
mediante compuertas llevado a cabo para otra institución.
Bibliografía:
A.E.Delgado,J.Mira et al, Teoría de Electrónica Digital, Sanz y Torres Ed.
D.Albarracín, E.Alcalde et al, Introducción a la Informática, McGraw Hill
Stallings, Organización y Arquitectura de Computadoras, Prentice Hall
28/ 37
Apéndice A
Sea la función representada en el diagrama de Karnaugh:
ab
cd
00
01
11
10
00
1
1
1
1
01
1
0
1
1
11
1
0
1
1
10
1
1
1
1
f (abcd)  (a b c d )  (a bc d )  (abc d )  (ab c d )  (a b c d )  (abc d )  (ab c d ) 
 (a b cd )  (abcd)  (ab cd )  (a b cd )  (a bcd )  (abcd )  (ab cd )
 a(bc d  bc d  bcd  b c d  b c d  bcd  b cd  b cd )  a (b c d  bc d  b c d  b cd  b cd  bcd )
Los términos iguales dentro de los paréntesis no dependen de a
 bc d  b c d  b c d  b cd  bcd  b cd  abc d  abcd
//////////desde esta, otra forma sería *
 b(c d  cd  ac d  acd)  b (c d  c d  cd  cd )
1
 bc( d  ad )  c ( d  ad )  b (1)
 b( d  ad )  b
 b( a  d )(d  d )  b
 b( a  d )  b tomo (a  d ) como una variable z y entonces queda:
b( z)  b  (b  b )(z  b )
 ( a  d  b )(b  b )
ab d
29/ 37
/////otra simplificación posible:
 c d (b  b )  c d (b  ab)  cd (b  ab)  cd (b  b )
 c d  cd  (b  ab)(c d  cd )
 d ( c  c )  (b  ab)d ( c  c )
 d  d (b  ab)
 d  d (bb  ab )
z
ab
 d  d ( ab ) 

d  dz  ( d  d )( z  d ) 
ab d
Si en lugar de tomar los unos de la función tomara los ceros, tengo también dos maneras de considerar la simplificación: la primera es tomando las variables en el estado que aparecen en el
diagrama de Karnaugh y luego negarla para considerar que son ceros (de lo contrario no habría
diferencia metodológica ni matemática entre una simplificación considerando unos y la otra
considerando los ceros de la función); la segunda es sacar la ecuación simplificada cambiando
los estados de las variables y cambiando productos por sumas de acuerdo al teorema de De
Morgan.
a)
f ( abcd)  a bc d  a bcd 
 f ( abcd)  a bc d  a bcd  ( a  b  c  d )(a  b  c  d )
 aa  b b  cc  d d
f (0)  a  b  d
b)
f (0)  ( a  b  c  d )(a  b  c  d )  a  b  d
30/ 37
Apéndice B
Sumador :
Está armado con circuitos electrónicos que representan compuertas lógicas, en este caso todas
son directas (AND, OR y XOR). Se compone de cuatro configuraciones circuitales iguales,
cada una de ellas actuando como una columna de números. Cada columna puede sumar dos dígitos (que elige el operador a través de los DIP-Switches) en el sistema binario y pasa a la siguiente columna el carry (si lo hubiera) de la suma.
El esquema de caja negra sería:
Carry Entr.
Díg A
Suma (A+B)
Díg B
Carry Sal.
El esquema electrónico correspondiente es:
X-OR (4070)
AND
(4081)
OR
(4071)
Me parece interesante que el Dto. de Matemática, a través de los docentes de Álgebra expliquen
el funcionamiento del circuito desde el punto de vista de esa área, y utilizar este equipo didáctico con el fin de que los alumnos puedan apropiarse de ese conocimiento más fácilmente que si
sólo deben imaginar qué uso se les podría dar a funciones lógicas. El mismo argumento podría
usarse para Arquitectura del Computador cuando se ve el tema compuertas.
Este equipo puede demostrarles el uso de esos elementos abstractos vistos en las dos asignaturas.
Describo a continuación la forma práctica en la que fue obtenido este circuito, insisto en que
sería interesante que los alumnos lo vieran también desde otros puntos de vista.
Desarrollo del circuito:
Se parte del conocimiento de las funciones O, Y y O-Exclusiva, o se desarrolla en clase cada
una de las funciones. Luego se define el símbolo correspondiente según la norma DIN y se explica que para electrónica las líneas representan el camino que seguirá la corriente eléctrica,
asignándose por convención el 1 lógico (verdadero) a una tensión alta y el 0 lógico a una tensión baja; en el caso del equipo, el color verde es el 1 lógico y el rojo es el 0.
31/ 37
El color verde indica 1 o Verdadero
El color rojo caracteriza al 0 o Falso
Se descompone la función suma en dos funciones separadas; una será la suma propiamente dicha y la otra la función acarreo.
La función suma responde a la suma de tres componentes: A, B y el acarreo de entrada (Ce).
Representándola en una cuadrícula quedaría:
SUMA
A,B
Ce
0
1
00
01
10
11
0
1
1
0
1
0
0
1
En particular, además de recordarles el funcionamiento de las compuertas e identificarlo con lo
visto en álgebra, me ha dado buenos resultados analizar el comportamiento de las compuertas
suponiendo un esquema de caja negra como el siguiente:
Entrada
(Se)
Salida
(S)
Control
(C)
La Entrada y el Control representan las dos entradas de las compuertas (se usaron compuertas
de doble entrada). En el ejercicio vemos qué pasa con la salida en función de la entrada y una
señal de control, llegamos a lo siguiente:
Con una compuerta Y se cumple que
y
S = Se para C = 1
S = 0 para C = 0
Para la O-Exclusiva
S = - Se para C = 1
S = Se para C = 0
y
La salida copia a la entrada cuando el control es 1 y
es siempre cero cuando el
control es cero.
La salida es la inversa
de la entrada para control=1 y la salida copia a
la entrada para control=0.
No es de utilidad el mismo análisis con la compuerta O, de modo que no se hace.
Volvemos al diagrama de la función
32/ 37
SUMA
A,B
Ce
0
1
00
01
10
11
0
1
1
0
1
0
0
1
Analizamos para C = 0. La compuerta que da 1 en su salida cuando las entradas (A y B) son
diferentes y 0 cuando tienen el mismo valor es la O-Exclusiva, de modo que en la primera aproximación, nuestro circuito queda:
A
B
Observando la tabla de la función, vemos que lo que debemos obtener es la salida de esta compuerta en forma directa cuando C=0 e invertida cuando C=1, esto se obtiene colocando otra
compuerta O-Exc en donde una entrada sea la salida de la anterior y la otra entrada sea la señal
que llamamos de Control (o Ce) y que en la realidad será el Acarreo de entrada.
Ce
A
B
Con esto terminamos el circuito que responde a la función suma de A, B y Ce.
La función acarreo es un poco más larga de analizar, su representación es:
ACARREO
A,B
Ce
0
1
00
01
10
11
0
0
0
1
0
1
1
1
Si tomamos lo remarcado, la función es verdadera cuando A y B lo son, sin importar el valor de
Ce (acarreo de entrada). Esto se logra con una compuerta Y cuyas entradas sean A y B.
Analíticamente :
Ahora tomamos los otros valores de verdad:
ACARREO
A,B
Ce
0
1
00
01
10
11
0
0
0
1
0
1
1
1
Analíticamente:
F (abc)  abc  a bc  abc  ab c  c(a b  ab  ab )  c(ab)  ab  c(a b  ab )
F (abc)  ab  (ab)
33/ 37
La función debe ser verdadera cuando A y B sean diferentes y C verdadero. La primera condición se cumple a la salida de nuestra primer compuerta O-Exc entre A y B (la usamos para la
función suma) y la segunda condición se cumplirá colocando una compuerta Y que “habilita” su
salida cuando una entrada es verdadera. El circuito es:
Ce
A
B
Para obtener la función ACARREO completa debemos juntar las dos condiciones en una compuerta O. Así, el circuito quedaría:
Ce
A
B
Cs
La función SUMA y ACARREO, se obtienen entonces con la combinación de ambos circuitos:
Ce
A
B
Suma
Cs
Que responde al circuito armado para el equipo de pruebas.
Uso
Al colocar las pilas aparecen encendidos los LEDs. La convención es Verde = 1 y Rojo = 0.
Al mover las palanquitas de los DIP-Switch cambiarán de estado los dígitos correspondientes a
cada número (A el de arriba y B el de abajo) en la fila de LEDs de 5 posiciones se obtiene el
resultado de la suma (si la llave está en +) o la resta si se puso B en complemento a 1.
34/ 37
La llave que permite restar es la que suma el último acarreo a la primera posición (método de
resta usando C-1).
Para usar el equipo para restas, es necesario que A y B sean números de cuatro dígitos, porque
de lo contrario no existirá un acarreo final válido.
Ilustraciones:
Dígito A
DIP Switches
Dígito B
(-)
Llave
Resultado
Circuito completo:
35/ 37
(+)
Restador:
Se puede emplear el método de complementar el sustraendo y efectuar una operación de suma;
lo que en realidad resulta en una operación de resta. El método es como sigue:
a) Obtener el binario del primer número
b) Obtener el C-1 del sustraendo. El C-1 se obtiene cambiando ceros por unos y viceversa
c) Hacer la suma
d) El resultado se obiene de dos formas dependiendo del valor del acarrreo final
Si el acarreo es 0 (rojo) el resultado debe entenderse como negativo y de valor igual al
complemento de lo obtenido
Si el acarreo es 1, debe sumarse al resultado de la suma y el valor debe entenderse como
positivo y directo (sin complementar).
Para usar el dispositivo electrónico proceder como sigue:
a) Pasar la llave de suma/resta hacia arriba (resta)
b) Considerar para el primer número (minuendo) el color verde como 1
c) Colocar el sustraendo considerando el rojo como 1
d) Si el primer led (último acarreo) es rojo, el resultado está expresado en complemento y es
negativo; si ese led es verde el resultado es positivo y el valor se lee directamente.
36/ 37
Apéndice C
Suma y resta de binarios en simple/doble presición
En el caso de trabajar con variables de tipo exponencial, las operaciones de
multiplicación y división se simplifican respecto a otros sistemas de representación
porque al estar en la misma base el producto se obtiene como el producto de ambas
mantisas y el exponente como la suma de los exponentes; la división es la división de
las mantisas y el exponente es la resta del exponente del dividendo y el divisor. En
ambos casos el exponente puede ser negativo (valores menores a la unidad) y la suma o la resta deben considerarse con el signo de cada exponente.
Ahora, para sumar y restar hay que hacerlo entre mantisas cuyas bases y
exponentes sean IGUALES, lo que implica un cambio de formato de alguno de los valores para cumplir dicha condición; pongamos un ejemplo cualquiera para ilustrar lo
dicho:
0,1011* 2 2  0,111* 2 3
Hay que definir cuál de los números voy a desnormalizar para poder hacer la
operación. Las opciones son llevar el exponente 2 a -3 ó el -3 a 2. Para cambiarlo de
forma tengo que multiplicar y dividir por la base elevada al exponente que necesito: en
el primer caso es -3, de modo que multiplico por 2 3 y por 2 3 , con lo cual estoy multiplicando por 1, o sea que no cambio el valor pero sí la forma.
0,1011* 2 2 * 23 * 2 3  10110* 2 3
En el otro caso quedar’ia:
0,111* 2 3 * 2 2 * 2 2  0,0000011011
* 22
Entre los dos, el primero implica tener enteros en la representación y eso está prohibido, de modo que sólo queda la posibilidad de la segunda representación, que
si bien está fuera de la normalización, puede ser representada por estos métodos.
Entonces, la operación quedaría:
0,1011* 2 2  0,0000011011
* 2 2  0,1011011011
* 22
De esta forma el resultado queda normalizado y se puede seguir usando este valor para lo que fuera necesario.
37/ 37
Descargar