Sistemas de numeración y aritmética binaria

Anuncio
Sistemas de numeración y aritmética binaria
Héctor Antonio Villa Martínez
Programa de Ciencias de la Computación
Universidad de Sonora
Este reporte consta de tres secciones. Primero, la Sección 1 presenta los
sistemas de numeración más utilizados en el diseño de sistemas digitales. En
seguida, la Sección 2 muestra los principales métodos para convertir números
de un sistema de numeración a otro. Por último, la Sección 3 explica como
se realizan las cuatro operaciones aritméticas básicas (suma, resta, multiplicación y división) en binario.
1.
Sistemas de numeración
El sistema de numeración de uso común, conocido como sistema decimal o
base 10, utiliza diez dígitos (0, 1, ..., 9) para representar números. El sistema
decimal es posicional porque el valor de un número se obtiene multiplicando
cada dígito por la potencia de 10 que le corresponde a la posición del dígito
dentro del número. La potencia se encuentra asignando la posición cero al
dígito que está a la izquierda del punto decimal y luego numerando el resto
de los dígitos, ascendentemente hacia la izquierda y descendentemente hacia
la derecha. Asi el valor del número decimal 727.53 es:
727.53 = 7 × 102 + 2 × 101 + 7 × 100 + 5 × 10−1 + 3 × 10−2
= 700 + 20 + 7 + 0.5 + 0.03
= 727.53
De la misma forma se pueden representar números en otros sistemas de
numeración. En el diseño de sistemas digitales los sistemas de numeración
1
más utilizados, además del sistema decimal, son el sistema binario o base 2,
el sistema octal o base 8 y el sistema hexadecimal o base 16. Cada uno de
estos sistemas se presentará a continuación.
El sistema binario emplea solo dos dígitos, 0 y 1, para representar números.
Como la base del sistema es 2, cada dígito binario se multiplica por la potencia de 2 que le corresponde:
11001.0112 = 1 × 24 + 1 × 23 + 0 × 22 + 0 × 21 + 1 × 20 + 0 × 2−1 + 1 × 2−2 + 1 × 2−3
= 16 + 8 + 1 + 0.25 + 0.125
= 25.37510
Nótese como para evitar confusiones entre números en bases distintas se
acostumbra marcar la base como un subíndice del número.
El sistema octal, por otro lado, utiliza ocho dígitos, 0, 1, ..., 7, para
representar números y cada dígito octal se multiplica por la potencia de 8
que le toca:
142.48 = 1 × 82 + 4 × 81 + 2 × 80 + 4 × 8−1
= 64 + 32 + 2 + 0.5
= 98.510
Por último, como el sistema hexadecimal necesita de dieciséis dígitos, se
utilizan los diez dígitos decimales para representar dígitos entre 0 y 9 y las
primeras seis letras del alfabeto para los dígitos del 10 al 15. De esta forma,
A representa 1010 , B representa 1110 , C representa 1210 , D representa 1310 ,
E representa 1410 y F representa 1510 . Parecido a los casos anteriores, cada
dígito hexadecimal se multiplica por la potencia correspondiente de la base,
en este caso 16:
D6C.5AF16 = 13 × 162 + 6 × 161 + 12 × 160 + 5 × 16−1 + 10 × 16−2 + 15 × 16−3
= 3328 + 96 + 12 + 0.3125 + 0.0390625 + 0.00366210938
= 3436.3552246093810
Como un ejemplo adicional, el Cuadro 1 lista los primeros 32 números
enteros en base 10, 2, 8 y 16.
2
Cuadro 1: Los primeros 32 números enteros en base 10, 2, 8 y 16.
base 10
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
base 2
0
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101
1110
1111
base 8
0
1
2
3
4
5
6
7
10
11
12
13
14
15
16
17
base 16
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
3
base 10
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
base 2
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111
base 8
20
21
22
23
24
25
26
27
30
31
32
33
34
35
36
37
base 16
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
2.
Conversión entre sistemas de numeración
Esta sección presenta los principales métodos para convertir números de
una base a otra. Como el sistema decimal es el sistema de numeración de uso
común, primero se presentan los métodos para convertir de base 10 a otra
base (Subsección 2.1) y de otra base a base 10 (Subsección 2.2). Después
se explica la conversión entre dos bases arbitrarias (Subsección 2.3). Por
último, se muestra una forma rápida para convertir entre base 2 y bases 8 y
16 (Subsección 2.4).
2.1.
De base 10 a otra base
La conversión de un número en base 10 a otra base, r, se realiza mediante
dos procedimientos separados, uno para obtener la parte entera del número
en base r y otro para obtener la parte fraccionaria.
La parte entera del número en base r se obtiene dividiendo la parte entera
del número decimal sucesivamente entre r, guardando en cada paso el residuo,
y volviendo a dividir el cociente entre r. Esta división continúa hasta que el
cociente sea cero. En este momento, la parte entera del número en base r se
forma considerando los residuos en el orden inverso en que se obtuvieron. Es
decir, el dígito más significativo de la parte entera es el último residuo que
se generó y el dígito menos significativo es el primer residuo.
La parte fraccionaria del número en base r se obtiene multiplicando la
parte fraccionaria del número decimal sucesivamente por r, guardando en
cada paso la parte entera del resultado, y volviendo a multiplicar la parte
fraccionaria del resultado por r. Esta multiplicación continúa hasta que la
parte fraccionaria del resultado sea cero o se obtenga la precisión deseada.
En este momento, la parte fraccionaria del número en base r se forma considerando los enteros en el mismo orden en que se obtuvieron.
Como ejemplo considere convertir 26.375 de base 10 a base 2.
La parte entera se convierte así:
26 ÷ 2 → cociente = 13, residuo = 0 (dígito menos significativo)
13 ÷ 2 → cociente = 6, residuo = 1
6 ÷ 2 → cociente = 3, residuo = 0
3 ÷ 2 → cociente = 1, residuo = 1
1 ÷ 2 → cociente = 0, residuo = 1 (dígito mas significativo)
Y la parte fraccionaria así:
0.375 × 2 = 0.75 → entero = 0 fracción 0.75 (primer dígito fraccionario)
4
0.75 × 2 = 1.5 → entero = 1 fracción 0.5
0.5 × 2 = 1.0 → entero = 1 fracción 0.0 (último dígito fraccionario)
En conclusión, 26.37510 = 11010.0112 .
En ocasiones nos encontramos con fracciones decimales que no se pueden
representar en otras bases de manera exacta. Para estos casos es necesario
definir una precisión o detener el proceso si la fracción en base r es cíclica.
Un ejemplo de esta última situación se genera al convertir 34.2 de base 10 a
base 8.
Primero se convierte la parte entera:
34 ÷ 8 → cociente = 4, residuo = 2
4 ÷ 8 → cociente = 0, residuo = 4
Y luego la parte fraccionaria:
0.2 × 8 = 1.6 → entero = 1, fracción 0.6
0.6 × 8 = 4.8 → entero = 4, fracción 0.8
0.8 × 8 = 6.4 → entero = 6, fracción 0.4
0.4 × 8 = 3.2 → entero = 3, fracción 0.2
0.2 × 8 = 1.6 → entero = 1, fracción 0.6
0.6 × 8 = 4.8 → entero = 4, fracción 0.8
En este momento nos podemos dar cuenta que la fracción octal es cíclica.
Por lo tanto, 34.210 se puede representar como 42.14638 con 4 dígitos de
precisión o más precisamente como 42.14638 .
2.2.
De otra base a base 10
La conversión de números de otra base a base 10 fue presentada informalmente en los ejemplos de la Sección 1. Formalmente, para convertir un número en base r, formado por n dígitos enteros y m fraccionarios
an−1 an−2 ...a1 a0 .b0 b1 ...bm−2 bm−1 , a base 10, se aplica la siguiente ecuación:
N = an−1 × rn−1 + an−2 × rn−2 + ... + a1 × r1 + a0 × r0 +
b0 × r−1 + b1 × r−2 + ... + bm−2 × r−(m−1) + bm−1 × r−m
Donde N es el número en base 10.
Como ejemplo, considere la conversión del número hexadecimal 25A.CC
a base 10.
5
N = 2 × 162 + 5 × 161 + 10 × 160 + 12 × 16−1 + 12 × 16−2
= 512 + 80 + 10 + 0.75 + 0.046875
= 602.79687510
2.3.
Conversión de base r a base s
El método más sencillo para convertir un número de base r a base s
es utilizar la base 10 como base intermedia. Esto es, el número original en
base r se convierte a base 10 como se explicó en la Sección 2.2 y luego el
número decimal se convierte a base s siguiendo el procedimiento visto en la
Sección 2.1.
2.4.
Conversión rápida entre base 2 y bases 8 y 16
Para el caso particular de convertir números de base 2 a base 8 o 16
y viceversa, existen métodos de conversión directos para evitar utilizar la
base 10 como base intermedia. A continuación se describen primero los métodos de conversión entre base 2 y base 8, y en seguida los métodos de conversión entre base 2 y base 16.
Para convertir un número de base 2 a base 8 se sigue el siguiente procedimiento. Primero, si el número de dígitos en la parte entera o en la parte
fraccionaria del número binario no es múltiplo de tres, se agregan ceros suficientes a la izquierda de la parte entera o a la derecha de la parte fraccionaria
cuidando de no alterar el valor del número. Segundo, los dígitos del número
binario se agrupan en bloques de tres dígitos. Finalmente, el número octal se
obtiene cambiando cada bloque de tres dígitos binarios por un dígito octal
de acuerdo al Cuadro 2. Como ejemplo, se muestra la conversión del número
binario 1011.01 a octal.
1011.012 = 001011.010 Después de agregar ceros a la izquierda y derecha.
= 001 011 . 010 Después de agrupar los dígitos binarios.
= 13.28 Después de cambiar los dígitos usando el Cuadro 2.
La conversión de un número de base 8 a base 2 sigue el procedimiento
inverso. Cada dígito octal se cambia por tres dígitos binarios de acuerdo al
6
Cuadro 2: Conversión entre base 2 y base 8.
Binario
000
001
010
011
100
101
110
111
Octal
0
1
2
3
4
5
6
7
Cuadro 2. Por ejemplo, la conversión del número octal 242.52 a binario es
como sigue.
242.528 = 010 100 010 . 101 010 Después de cambiar los dígitos usando el Cuadro 2.
= 10100010.101012 Después de eliminar los ceros superfluos.
La conversión de base 2 a base 16 es similar a la conversión de base 2
a base 8 descrita arriba. Las únicas diferencias son que los bloques tienen
cuatro bits binarios y que cada bloque se cambia por un dígito hexadecimal
usando el Cuadro 3. En el ejemplo que sigue, se muestra la conversión del
número binario 101110.01 a hexadecimal.
101110.012 = 00101110.0100 Después de agregar los ceros necesarios.
= 0010 1110 . 0100 Después de agrupar los dígitos binarios.
= 2E.416 Después de cambiar los dígitos usando el Cuadro 3.
Finalmente, para convertir un número de base 16 a base 2 cada dígito hexadecimal se sustituye por cuatro dígitos binarios de acuerdo al Cuadro 3. Así,
la conversión del número hexadecimal 72.E5C a binario es como se muestra
a continuación.
72.E5C16 = 0111 0010 . 1110 0101 1100
= 1110010.11100101112
Después de cambiar los dígitos
usando el Cuadro 3.
Después de eliminar los ceros superfluos.
7
Cuadro 3: Conversión entre base 2 y base 16.
Binario
0000
0001
0010
0011
0100
0101
0110
0111
Hexadecimal
0
1
2
3
4
5
6
7
Binario
1000
1001
1010
1011
1100
1101
1110
1111
Hexadecimal
8
9
A
B
C
D
E
F
Cuadro 4: Suma de dos dígitos binarios.
x
0
0
1
1
3.
y
0
1
0
1
x+y
0
1
1
0
Acarreo
0
0
0
1
Aritmética binaria
En los sistemas digitales las operaciones aritméticas se realizan en binario
porque es más fácil diseñar circuitos digitales para realizar aritmética binaria que aritmética decimal. Estas operaciones aritméticas incluyen la suma
(Sección 3.1), resta (Sección 3.2), multiplicación (Sección 3.3) y división (Sección 3.4). Las operaciones se hacen del mismo modo que en el sistema decimal, pero debido a la sencillez del sistema binario, pueden hacerse algunas
simplificaciones que facilitan la realización de las operaciones.
3.1.
Suma
La suma de dos dígitos binarios, x y y (ver Cuadro 4), involucra el concepto de acarreo (carry en inglés). El acarreo se presenta cuando se suma 1
+ 1 cuyo resultado, 2 en decimal, se escribe con dos dígitos en binario (10).
En este caso la suma es 0 y se pasa (o se acarrea) 1 a la siguiente columna.
Como ejemplo considere la suma binaria de 11001 y 1101.
8
Cuadro 5: Resta de dos dígitos binarios.
x y
0 0
0 1
1 0
1 1
x−y
0
1
1
0
Préstamo
0
1
0
0
110010 ← acarreos
11001
+
1101
100110
Los acarreos, presentados en rojo, muestran si en la columna anterior
hubo acarreo (valor de 1) o no (valor de 0).
3.2.
Resta
La resta de números binarios es similar a la resta decimal que conocemos.
Cuando al restar dos números binarios nos encontramos con la operación
0 − 1 se genera un préstamo de la siguiente columna (ver Cuadro 5). Al
continuar con la siguiente columna hay que tomar en cuenta el préstamo,
y si es necesario volver hacer un préstamo de la columna que sigue. Si el
préstamo se propaga hasta la última columna entonces el resultado de la resta
es un número negativo. La representación en binario de números negativos se
presenta en [1]. Para una explicación más extensa del concepto de préstamo,
consultar Roth [2, p. 11].
Como ejemplo considere la resta binaria de 111001 y 1011.
011100 ← préstamos
111001
+
1011
101110
Los préstamos, presentados en rojo, muestran si en la columna anterior
hubo un préstamo (valor de 1) o no (valor de 0).
9
Cuadro 6: Multiplicación de dos dígitos binarios.
x
0
0
1
1
3.3.
y
0
1
0
1
x×y
0
0
0
1
Multiplicación
En la multiplicación de números binarios sólo es necesario recordar la
tabla de multiplicación que se exhibe en el Cuadro 6.
Como ejemplo se presenta la multiplicación de 1111 por 1101. Nótese
como para evitar sumas de varios dígitos binarios se hacen sumas parciales,
denotadas en rojo, después de cada dos números generados. El producto final
se muestra en azul.
1111
×
1101
1111 Primer producto parcial
0000 Segundo producto parcial
01111 Primera suma parcial
1111
Tercer producto parcial
1001011 Segunda suma parcial
1111
Cuarto producto parcial
11000011 Producto final
3.4.
División
La división binaria es más sencilla que la división decimal porque solo hay
dos posibles valores para el cociente: 0 si el divisor es menor que el dividendo,
y 1 en caso contrario. Como ejemplo a continuación se muestra la división
de 10010001 entre 1011.
10
1101
10010001
1011
1110
1011
1101
1011
10
Al finalizar la división, se obtiene que el cociente es 1101 y el resto o
residuo es 10.
1011
11
Referencias
[1] Héctor Antonio Villa Martínez. Representación de números en binario.
Technical report, Universidad de Sonora, Hermosillo, Sonora, 2008.
[2] Charles H. Roth Jr. Fundamentos de diseño lógico. Thomson, México, DF, quinta edition, 2005.
12
Descargar