Professional Documents
Culture Documents
Marcelo Guarini
Departamento de Ingenierı́a Eléctrica,
5 de Abril, 2005
Evidentemente, los números con parte fraccionaria también pueden ser representados de esta forma.
Por ejemplo:
De esta misma forma, cualquier número en cualquier base , con dı́gitos en la parte entera y
Conclusión : para pasar un número en base a base decimal se aplica la expresión (1), operando en
aritmética decimal.
1
Veamos ahora como pasar un número que esta en base decimal a otra base distinta . Consideremos
primero un número entero, por ejemplo: 147, y supongamos que debemos pasarlo a base 2.
Como vimos una forma posible es aplicar (1) operando en aritmética de base 2. Sin embargo esto
último resulta muy complejo debido a que, como dijimos, estamos acostumbrados a operar en base
decimal.
Como se aprecia, este método es una forma de aplicación inversa de la ecuación (1). El número bina-
rio correspondiente es el de la columna de la derecha, desde el dı́gito más significativo hasta el menos
significativo (10010011).
Este método de restas sucesivas es evidentemente aplicable además a números con parte fraccionaria.
en dividir repetidamente por dos generando sólo la parte entera de la división. El resto corresponderá
al dı́gito buscado.
2
147 : 2 = 73
"
1 1
73 : 2 = 36
"
1 1
36 : 2 = 18
"
0 0
18 : 2 = 9
"
0 0
9 : 2 = 4
"
1 1
4 : 2 = 2
"
0 0
2 : 2 = 1
"
0 0
1 : 2 = 0
"
1 1
La columna de la derecha contiene el número buscado, sin embargo, como dijimos, en esta ocasión
el primer dı́gito obtenido es el menos significativo y el último el más significativo.
El método de las divisiones sucesivas no sólo es valido para pasar un número decimal a base 2.
Dividiendo por la base correspondiente es posible pasar a cualquier base, operando en arittmética
decimal.
3
0.6875 2
1 & 1.3750
0.375 2
0 & 0.750
0.75 2
1 & 1.50
0.5 2
1 & 1.0
En esta regla, el dı́gito más significativo es el que se obtiene primero, y el menos significativo el
último. Como se ve en el ejemplo, el proceso termina cuando la parte fracionaria se hace 0. Es
importante notar que en algunos casos este proceso puede ser ' ya que una parte fraccionaria
con número finito de digitos en una base
puede no tener representación exacta en otra base
.
(
(
!
! !
!
(
!
!
%
! %
!
(
%
!
! !
De la factorización se aprecia que cada uno de los grupos de tres dı́gitos binarios, ( , ,
!
, corresponde a cada uno de los dı́gitos del número en base octal. De la misma forma, es
posible factorizar la expresión (1) considerando grupos de a cuatro dı́gitos binarios. En este caso
la factorización corresponde al sistema numérico de base 16 o sistema hexadecimal. Vemos que en
ambos casos, todas las combinaciones de dı́gitos binarios, tres en el caso octal y cuatro en el caso
hexadecimal, corresponden a cada uno de los dı́gitos del sistema considerado, ni una más y ni una
menos. La tabla 1 ilustra claramente lo que hemos establecido.
4
Tabla 1: Combinaciones binarias correspondientes al sistema numérico octal y hexadecimal.
Veamos algunos ejemplos tı́picos de conversión entre base binaria, octal y hexadecimal.
# ! " !
(
1. )
!
* + , - * + , - * + , - * + , - , * + , - * + , - * + , -
. . . . . . .
!
(
1 5 3 5 , 3 5 4
" !
2. (E4A,5C)
)
E 4 A , 5 C
. . . . .
, - * + , - * + , - * + , - * + , - * +
,
" !
(
3. (B7,D)
)
!
B 7 , D
. . .
, - * + , - * + , - * +
! !
, = * + , - * + , - * + , - , * + , - * + , -
. . . . .
!
(
2 6 7 , 6 4
5
Es importante notar que los grupos de 3 o 4 dı́gitos binarios deben hacerse de derecha a izquierda
para la parte entera y de izquierda a derecha para la parte fraccionaria. Para completar los grupos se
agregan ceros a la izquierda para la parte entera y a la derecha para la parte fraccionaria.
Binario Decimal
"
0000 0
"
0001 1
"
0010 2
"
0011 3
"
0100 4
"
0101 5
"
0110 6
"
0111 7
"
1000 8
"
1001 9
Aplicando la expresión (1) a los números binarios de la primera lista de la tabla 2, permite obtener
los dı́gitos decimales de la segunda lista. Al hacer esto, cáda dı́gito binario de la primera columna
%
es multiplicado por , cada dı́gito de la segunda columna por , cada dı́gito de la tercera
columna por , y cada dı́gito de la cuarta columna por . Por este motivo, al código
BCD también se le ha llamado código 8421. Al factor formado por la base elevada a la potencia que
corresponde a cada columna se le llama peso o ponderador. Por este motivo, a este tipo de códigos
se les conoce como códigos en base a pesos o códigos ponderados, en ingles weighted codes.
6
Para escribir un número decimal en código BCD simplemente se escribe cada dı́gito expresado en
binario según la tabla 2 en el mismo orden en que aparececn en la representación decimal. Por
ejemplo
"
De la misma forma se escriben los números con parte fraccionaria, por ejemplo
$ # " #
Tabla 3: Ejemplos de códigos en base a pesos para representar los dı́gitos decimales.
" " "
6421 Decimal 4321 Decimal 5211 Decimal
" " "
0000 0 0000 0 0000 0
" " "
0001 1 0001 1 0001 1
" " "
0010 2 0010 2 0010 1
" " "
0011 3 0011 3 0011 2
" " "
0100 4 0100 3 0100 2
" " "
0101 5 0101 4 0101 3
" " "
0110 6 1000 4 0110 3
" " "
1000 6 0110 5 0111 4
" " "
0111 7 1001 5 1000 5
" " "
1001 7 0111 6 1001 6
" " "
1010 8 1010 6 1010 6
" " "
1011 9 1011 7 1011 7
" "
1100 7 1100 7
" "
1101 8 1101 8
" "
1110 9 1110 8
"
1111 9
Como se puede apreciar en la tabla 3, no todos los dı́gitos decimales tienen una sola representación.
Esta es una desventaja que presentan los códigos ponderados, distintos del BCD u 8421. Algunos de
los códigos ponderados, como el 5211 de la tabla ??, tienen la propiedad de ser autocomplementarios.
Esto significa que el complemento correspondiente al 0 decimal es el 9, el complemento del 1 decimal
es el 8, el complemento del 2 decimal es el 7, etc. De la misma forma, el complemento del 9 es el 0,
el complemento del 8 es el 1, etc.
7
También es posible diseñar códigos con combinaciones de pesos positivos y negativos, por ejemplo
el código 642-1. Sin embargo, estos no son utilizados.
Como se aprecia en la tabla 4 el código exceso de tres tiene la caracterı́stica de ser autocomplemen-
tario.
El uso de códigos con exceso es particularmente atractivo para representar los exponentes en números
de punto flotante, de tal forma que el valor mı́nimo del exponente quede representado sólo por ceros.
8
# # # # # #
Sea / /
/ una palabra en código Gray de bits, y sea
, su correspondiente
número binario. Los subı́ndices y corresponden al dı́gito menos significativo y meas significativo
1 2
respectivamente. El 0 0 3 dı́gito / 4 se puede obtener del correspondiente binario, de la siguiente
forma
7 7
/ 4 4 5 46
0
/
0 0 0
0 1 1
1 0 1
1 1 0
Para convertir de código Gray a código binario se comienza con el dı́gito de más a la izquierda, dı́gito
más significativo, y se procede hasta el dı́gito menos significativo, haciendo 4 / 4 si el número de
:
unos que precede a / 4 es par, y haciendo 4 / 4 si el número de unos que precede a / 4 es impar. En
notación matemática
/
4 / 5 /
5 5 / 4
El código Gray es miembro de una clase llamada códigos reflejados. El término reflejado se utiliza
para designar a los códigos que tienen la propiedad de que el código de bits puede generarse por
!
reflexión del código de bit como se ilustra en la tabla 6.
9
Tabla 6: Generación del código Gray por reflexión.
00 0 00 0 000
01 0 01 0 001
11 0 11 0 011
10 0 10 0 010
1 10 0 110
1 11 0 111
1 01 0 101
1 00 0 100
1 100
1 101
1 111
1 110
1 010
1 011
1 001
1 000
agregando, como dijimos, el signo a la izquierda del bit más significativo. Aunque este código es
muy simple, para su uso práctico en máquinas digitales requiere de circuitos y algoritmos digitales
complejos, que elevan tanto el costo en términos de componentes, como de tiempo de cálculo. En
la tabla 7 se muestra la representación signo y magnitud para los primeros 16 números positivos
(incluyendo el 0) y para los primeros 16 negativos, frente a otras representaciones más convenientes
del punto de vista de las aplicaciones. En forma general un número en signo y magnitud se representa
de la siguiente forma
# #
# #
10
Tabla 7: Algunos códigos para representar números con signo.
11
4.2.1 Complemento a la base 2
El complemento de un número binario a la base dos o más simple, complemento de dos de un número
binario, está dado por
!
) (3)
!
donde es el número de bits del número binario ) . El complemento de dos de un número bi-
nario es la forma más común de representar números negativos. El motivo es que no se requiere
hardware digital especial para operar números con signo. En efecto, un sumador binario común per-
mite, utilizando este código, sumar y restar. La tabla 7 muestra los números posibles de representar
en complemento de dos si utilizamos 5 dı́gitos binarios, incluyendo el bit de signo. Veamos como
obtener el complemento de dos de un número.
!
Determinar el complemento de dos del número
! ! !
! ; <
=
!
Una forma más simple, que corresponde a restar el número ) a , donde es el número de dı́gitos
incluyendo el bit de signo, es complementar el número y sumar uno al resultado, de la siguiente forma:
! !
) =
:
! !
) =
!
+
! ; <
=
Otra forma aun más rápida consiste en inspeccionar el número de derecha a izquierda (desde menos
significativo a más significativo), copiando el número tal como está hasta el primer uno inclusive.
Desde allı́, se complementan tódos los dı́gitos.
"
se complementa * + , - * + , - & se deja igual
, - * + , - * +
Estos tres procedimientos funcionan exactamente igual para pasar un número negativo a su corre-
spondiente positivo.
12
!
) (4)
!
donde corresponde al número de bits de ) . Para determinar el complemento de 1 de un número
binario determinado, se puede aplicar directamente la ecuación (4). Sin embargo resulta mucho más
fácil complementar el número positivo correspondiente, ya que esta operación es lo mismo que aplicar
(4).
! !
Como ejemplo, determinemos el complemento de 1 de ) .
! !
) =
:
! ! ; <
) = =
5 Aritmética Binaria
A continuación revisaremos como se realiza la operación de suma binaria de números de signo pos-
itivo y negativo utilizando los códigos de complemento de uno y de complemento de dos. La mejor
forma de enfocar esta revisión es a través de ejemplos, los que además nos permitirán destacar algunas
caracterı́sticas especiales para corroborar la pertinancia de los resultados.
! ! ; <
=
Lo primero que debemos hacer es que los dı́gitos de signo coincidan. En complemento de uno esto
se logra haciendo propagando el bit de signo tantos lugares como sea necesario y luego se efectúa la
suma. En nuestro ejemplo
! ! ; <
=
! ! ; <
+
=
$ ! ! ; <
=
El siguiente ejemplo nos ilustra que puede pasar cuando la cantidad de dı́gitos escogida no permite
! !
representar correctamente el resultado. Tratemos de sumar los números
y
.
13
! ! ; <
=
! ! ; <
+
=
$ ! ! ; <
> =
& Error
Aunque la suma binaria es correcta, la interpretación en complemento de uno no lo es, ya que la suma
de dos números positivos da como resultado un número negativo. Esto ocurre en el ejemplo debido
a que con 6 dı́gitos binarios, incluı́do el bit de signo, podemos representar como máximo el número
!
. Para solucionar el problema extendemos el bit de signo un lugar hacia la izquierda. Con
$ !
esto podremos representar hasta el número
. Entonces
! ! ; <
=
! ! ; <
+
=
$ ! ! ; <
=
& Correcto
Hasta ahora sólo hemos sumado números positivos, que es exactamente lo mismo que en binario puro
excepto por el bit de signo, que debemos cuidar que esté en la posición adecuada y por la cantidad de
bits, para poder representar el resultado correcto. Veamos ahora la suma de un número positivo y uno
! !
negativo. Sumar en complemento de uno los números
y
! ! ; <
=
! ! ; <
=
! ! ; <
=
! ! ; <
extendiendo el bit de signo de -12
=
! ! ; <
> =
& Error
plemento de uno. Para solucionar el problema, cada vez que el carry es igual a uno, desde el bit
de signo hacia afuera, este se elimina, pero a su vez se debe sumar uno al resultado. En nuestro
ejemplo,
! ; <
=
! ; <
=
! ; <
=
14
5.2 Suma en complemento de dos
Para la suma en complemento de dos se procede en forma similar a la suma en complemento de
uno. Sin embargo, tiene la ventaja de que cuando se produce un carry igual a uno, desde el bit de
signo hacia afuera, este se elimina, sin requerir la suma de un 1 al resultado. Esto hace que el código
complemento de dos sea hoy el más utilizado en las máquinas digitales, ya que permite simplificar
el algoritmo de suma, permitiento tiempos de cálculo más cortos. De la misma forma que para el
complemento de uno, hay que cuidar que los resultados, cuando se suma dos númerros positivos o
cuando se suma dos números negativos, estén dentro de la representación que permite el número de
dı́gitos que estamos utilizando.
! !
Sumemos ahora los números
y
. En este caso se debe recordar alguna de las formas
Eliminando el carry, en color rojo, que se produce desde el bit de signo hacia afuera, vemos que el
resultado no es correcto, ya que la suma de dos números negativos nos generó un resultado positivo.
$ !
Como ya sabemos, el problema ocurre porque no es posible representar el número
con 6
dı́gitos binarios incluyendo el bit de signo. Entonces debemos extender el bit de signo en ambos
números un lugar a la izquierda.
! ! ; <
=
! ! ; <
+
=
$ ! ! ; <
=
& Correcto
15