SistemasNumeracion

download SistemasNumeracion

of 29

description

sssss

Transcript of SistemasNumeracion

  • Captulo 3

    Sistemas de numeracin

    En este captulo se estudian los sistemas de numeracin usados en sistemasdigitales, las tcnicas para convertir entre bases de numeracin y cmo hacer op-eraciones bsicas en binario.

    3.1. Introduccin

    A lo largo de la historia se han usado diferentes sistemas de numeracin. Unoque se sigue usando en la actualidad, aunque muy poco, es el sistema romano.Como sabr, en estos nmeros existen una serie de smbolos con un valor jo yunas reglas muy sencillas para interpretarlos. Bsicamente hay que sumar todoslos smbolos, salvo cuando uno de menor valor precede a uno de mayor valor, encuyo caso se resta el menor del mayor. Por ejemplo:

    XXVII = 10 + 10 + 5 + 1 + 1 = 27IX = 10 1 = 9

    El mayor inconveniente de este sistema de numeracin, aparte de su legibilidad,es que no es fcil realizar operaciones con ellos. Existen algoritmos para sumar yrestar que son relativamente fciles. Sin embargo la multiplicacin es compleja yla divisin es imposible. Aunque en [Chu-Carroll, 2006] se muestran los algoritmospara operar con nmeros romanos, ciertamente es ms cmodo realizar la operacinconvirtiendo los nmeros a decimal, hacer la operacin y luego volver a convertir anmeros romanos:

    XXVII + IX = 27 + 9 = 36 = XXXVI

    Debido a esto, se estableci un sistema de numeracin ms potente, el decimal,que aparte de ser mucho ms legible y poder representar nmeros grandes,1 permiterealizar operaciones fcilmente.

    1El mayor smbolo de los nmeros romanos es el M (1000), por lo que para representar porejemplo el nmero 1.000.000 sera necesario escribir 1.000 M seguidas.

    35

  • 36 Sistemas de numeracin

    3.2. Sistemas de numeracin posicionales

    El sistema de numeracin decimal es mucho ms til debido a que es un sistemade numeracin posicional, es decir, el valor de cada dgito depende de la posicin enla que se encuentra dentro del nmero. As, en el nmero 27 el 2 tiene un valor de2 decenas, mientras que en el nmero 72, el mismo 2 tiene un valor de 2 unidades.Por el contrario, en los nmeros romanos cada letra tiene siempre el mismo valor,independientemente de donde se encuentre. As, en el nmero XI la X vale 10, y enel IX, la X tambin vale 10.

    En concreto, en un sistema de numeracin posicional cada cantidad se repre-senta por una secuencia de smbolos (dgitos), de forma que el valor representado esigual a la suma de los productos de cada smbolo por un valor (peso) que dependede la posicin del smbolo.

    3.2.1. Representacin del tiempo

    El tiempo se puede representar mediante un sistema posicional. Por ejemplo,1:33:27 equivale a 1 hora, 33 minutos, 27 segundos, o lo que es lo mismo: 1 60 60 + 33 60 + 27 segundos.

    Si el tiempo a representar es mayor que un da, se aadira un dgito ms porla izquierda: 2:1:33:27 equivale a 2 das, 1 hora, 33 minutos, 27 segundos, o lo quees lo mismo: 2 24 60 60 + 1 60 60 + 33 60 + 27 segundos.

    El usar 60 como peso para horas, minutos y segundos es una herencia de losSumerios, que empezaron a usarlo en el ao 2000 AC. La razn de usar 60 es quees divisible por 12 nmeros: 1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30 y 60. Esto haceque muchas fracciones de los nmeros en base 60 (sexagesimales) sean enteras. Enla actualidad los nmeros sexagesimales se usan para expresar tiempo, ngulos ycoordenadas geogrcas.

    3.2.2. Sistemas de numeracin polinmicos

    Cuando en un sistema de numeracin posicional los pesos se incrementan segnuna progresin geomtrica. decimos que es un sistema de numeracin polinmico.En estos casos la progresin geomtrica se forma con las potencias de un nmeroal que se denomina base.

    El sistema decimal es el ejemplo ms conocido de este tipo de sistema de nu-meracin. As cuando escribimos 1327, la cantidad que se est representando es:

    1327 = 1 1000 + 3 100 + 2 10 + 7 1 = 1 103 + 3 102 + 2 101 + 7 100

    Como se puede observar, la base usada en el sistema decimal es 10 (de ah sunombre).

    En general, dado un nmero dn1dn2 d1d0, en una base b, la cantidad rep-

  • 3 Sistemas de numeracin 37

    resentada por el nmero es:

    dn1dn2 d1d0 = dn1 bn1 + dn2 bn2 + + d1 b1 + d0 b0 =n1i=0

    di bi

    Si el nmero contiene una coma, la frmula anterior se generaliza a:

    dn1 d1d0, d1 dm = dn1 bn1 + + d1 b1 + d0 b0+

    + d1 b1 + + dm bm =n1i=m

    di bi

    Por ejemplo, el nmero 123,42 equivale a:

    123,42 = 1 102 + 2 101 + 3 100 + 4 101 + 2 102 == 1 100 + 2 10 + 3 1 + 4 0,1 + 2 0,01

    Por otro lado, es conveniente resaltar que el nmero de smbolos necesarios pararepresentar cada dgito es igual a la base. As en el sistema decimal se necesitandiez smbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9.

    3.2.3. El sistema binario

    Nosotros usamos el sistema decimal porque tenemos 10 dedos.2 Sin embargo,en un sistema digital slo existen dos smbolos: 0 y 1. Por tanto para representarun nmero slo puede usarse base 2. No obstante, el manejo de nmeros en bi-nario es exactamente igual al de nmeros decimales. Por ejemplo el nmero 10012representa3 la cantidad:

    10012 = 1 23 + 0 22 + 0 21 + 1 20 = 1 8 + 0 4 + 0 2 + 1 1 = 9A pesar de esto, el manejo de nmeros binarios es un poco incmodo por dos

    razones:Para representar una cantidad se necesita una gran cantidad de dgitos, locual hace que sean difciles de memorizar, escribir, etc. Se dice que estosnmeros son poco expresivos.La falta de costumbre hace que nos sea difcil hacernos una idea de la cantidadque representa un nmero en binario, cosa que no ocurre en decimal.

    No obstante no todo son inconvenientes. Los nmeros binarios tambin tienensus ventajas.

    Al necesitar slo dos smbolos pueden almacenarse y procesarse en un sis-tema digital.

    2Los mayas usaban un sistema de numeracin en base 20 [Wikipedia, 2010]. Es de suponerque usaban los dedos de las manos y de los pies para contar.

    3Para evitar confusiones, en este texto los nmeros que estn en una base distinta a la decimalse distinguirn poniendo su base como un subndice del nmero.

  • 38 Sistemas de numeracin

    Las operaciones son muy sencillas. Por ejemplo las reglas de la suma son slo4 frente a las 100 de los nmeros decimales:

    0 + 0 = 00 + 1 = 11 + 0 = 11 + 1 = 10

    Ntese que en la ltima ecuacin 10 representa el nmero dos en decimal, noel 10.4

    En conclusin los sistemas digitales slo pueden trabajar con nmeros binarios,pero a nosotros nos resulta incmodo trabajar directamente con ellos. La solucinconsiste en dejar a los sistemas digitales que trabajen en binario, trabajar nosotrosen decimal y realizar las conversiones de bases cuando tengamos que transferir unnmero a/desde un sistema digital.

    3.3. Conversin entre bases

    Como se acaba de decir, es frecuente en la prctica tener que convertir nmerosde binario a decimal y viceversa. En esta seccin se expone cmo realizar estasconversiones.

    3.3.1. Conversin de binario a decimal

    Para pasar de binario (o de cualquier base b) a decimal basta con aplicar lafrmula:

    N =n1i=0

    di bi

    En donde b es la base, que recordemos que en binario es 2. Por ejemplo, paraconvertir el nmero 10110012 a decimal, basta con calcular:

    10110012 = 1 26 + 0 25 + 1 24 + 1 23 + 0 22 + 0 21 + 1 20 = 89Si el nmero a convertir tiene una coma binaria la conversin se realiza usando

    la frmula generalizada:

    N =n1i=m

    di bi

    Por ejemplo, la conversin 111,011 a decimal se realiza:

    111,0112 = 1 22 + 1 21 + 1 20 + 0 21 + 1 22 + 1 23 = 7,375

    int main(void){ printf("Hola\n");

    } return 0;

    Realice el ejercicio 1 4Existe una frase graciosa, slo apta para frikis: Existen 10 tipos de personas: las que sabenbinario y las que no.

  • 3 Sistemas de numeracin 39

    3.3.2. Conversin de decimal a binario

    Para convertir un nmero decimal a binario existen varias tcnicas, aunque lams usada es la de divisiones sucesivas. Esta tcnica consiste en ir dividiendo elnmero a convertir entre dos e ir anotando los restos de las divisiones parciales.Se termina de dividir cuando el resultado es cero, formndose el nmero binarioleyendo los restos obtenidos de derecha a izquierda. Lo mejor es ilustrar el procesomediante un ejemplo. As, la conversin del nmero 13 a binario se realiza:

    3

    1

    0

    1

    2

    1

    1

    2

    0

    13 2

    6 2

    Por tanto, 13 = 11012.El algoritmo anterior slo es vlido para la parte entera del nmero. La parte

    decimal se convierte mediante multiplicaciones sucesivas. Para ello se toma dichaparte decimal y se multiplica sucesivamente por dos. La parte entera del resultadoes el bit resultante de la conversin y la parte decimal se vuelve a multiplicar pordos. El algoritmo naliza cuando la parte decimal del resultado sea cero o cuandohayamos obtenido el nmero de bits deseado para la parte fraccionaria. El nmeroen binario se forma leyendo de arriba a abajo las partes enteras obtenidas de lasmultiplicaciones. Al igual que antes, lo mejor es ilustrar el algoritmo mediante unejemplo:

    0,375 2 = 0,750,75 2 = 1,50,5 2 = 1,0

    Por tanto, 0,375 = 0,0112 y teniendo en cuenta la conversin anterior, 13,375 =1101,0112.

    Si la parte fraccionaria no es divisible entre dos no se puede representar con unnmero nito de bits. Por ejemplo, la conversin a binario de 0,3 se realiza:

    0,3 2 = 0,60,6 2 = 1,20,2 2 = 0,40,4 2 = 0,80,8 2 = 1,60,6 2 = 1,2

  • 40 Sistemas de numeracin

    Como se puede observar, a partir de la sexta lnea se repite el resultado obtenidode la multiplicacin, por lo que el resultado nunca podr tener cero como partefraccionaria. Es decir, 0,3 = 0,01001. En estos casos, dado que en un sistemadigital el nmero de bits es nito, se termina la conversin cuando se obtengan losbits reservados a la parte fraccionaria del nmero. En este caso la representacinbinaria no ser exacta, cometindose un error de cuantizacin. En el ejemploanterior, si tenemos que representar 0,3 con slo 6 bits para la parte fraccionaria,obtendremos:

    0,0100112 = 0 21 + 1 22 + 0 23 + 0 24 + 1 25 + 1 26 = 0,296875

    El error de cuantizacin cometido es igual a:

    e =0,3 0,296875

    0,3 100% = 1,04%

    En general, el error de cuantizacin se obtiene mediante la frmula:

    e =numerooriginal numeroaproximado

    numerooriginal 100%

    Por ejemplo, al convertir 13,3 a binario usando 6 bits para la parte fraccionaria, elresultado es 1101,0100112, siendo el error de cuantizacin:

    e =13,3 13,296875

    13,3 100% = 0,0235%

    int main(void){ printf("Hola\n");

    } return 0;

    Realice el ejercicio 2

    3.4. Rangos

    En un sistema digital los nmeros binarios han de representarse mediante unnmero jo de bits. Por ejemplo, para transmitir un nmero binario dentro deun circuito normalmente se usa un conjunto de conductores de forma que cadauno transporta un bit. Obviamente una vez que se ha fabricado el circuito estosconductores no pueden ampliarse, por lo que todos los nmeros que se transmitanusando dichos conductores han de tener el mismo nmero de bits.

    La repercusin de tener que reservar de antemano un nmero de bits pararepresentar los nmeros binarios en un sistema digital es que el rango de valoresque se pueden representar es limitado. Por ejemplo, si se dispone de tres bits, el

  • 3 Sistemas de numeracin 41

    rango de nmeros que es posible representar es:

    000 0001 1010 2011 3100 4101 5110 6111 7

    En general, es fcil demostrar que el rango de valores que se pueden representarcon n bits es 0 2n 1. As por ejemplo, para tres bits el rango ser 0 23 10 7. Esto signica que no se podr representar ningn nmero mayor que 7. Sise desea representar un nmero mayor ser necesario usar ms bits.

    3.5. Sistemas hexadecimal y octal

    Tal como se ha visto en la seccin 3.3, la conversin entre binario y decimal esrelativamente compleja. Por otro lado, trabajar con nmeros binarios no es cmododebido a la gran cantidad de dgitos necesarios. Debido a esto se usan en la prcticaotras bases que permiten una fcil conversin a binario y, al necesitar menos dgitospara representar los nmeros, hacen que su uso sea ms amigable por parte delhombre. Estas bases son aquellas que sean mltiplos de dos, pues entonces sepuede demostrar que la conversin puede realizarse dividiendo el nmero en gruposde bits y convirtiendo cada uno por separado, lo cual es ms fcil que convertir elnmero completo como ocurre en decimal. Las dos bases usadas son la octal (base 8)y la hexadecimal (base 16).

    En el cuadro 3.1 se muestra la equivalencia entre decimal, binario, octal y hex-adecimal. Ntese que, tal como se do anteriormente, para la base 8 necesitamosslo ocho smbolos, por lo que obviamente se han elegido los nmeros de 0 a 7.Para representar los nmeros en base 16 se necesita tener 16 smbolos. Como sepuede apreciar en el cuadro, se han elegido como smbolos del 0 al 9 y para los seisrestantes, en lugar de inventar garabatos nuevos se han usado las letras de la A ala F, asignndole los valores mostrados en el cuadro.

    3.5.1. Conversin entre binario y octal

    La conversin de binario a octal se realiza agrupando los bits de tres en tresempezando por el bit menos signicativo5. Si es necesario se aadirn ceros por la

    5El bit menos signicativo es el que est a la derecha del nmero y el ms signicativo es elque est a la izquierda.

  • 42 Sistemas de numeracin

    Decimal Binario Octal Hexadecimal0 00000 00 01 00001 01 12 00010 02 23 00011 03 34 00100 04 45 00101 05 56 00110 06 67 00111 07 78 01000 10 89 01001 11 910 01010 12 A11 01011 13 B12 01100 14 C13 01101 15 D14 01110 16 E15 01111 17 F16 10000 20 10

    Cuadro 3.1: Equivalencia entre decimal, binario, octal y hexadecimal.

    izquierda para completar el ltimo grupo. Una vez agrupados los bits, se conviertecada grupo por separado. Lo mejor, como siempre, es realizar unos ejemplos:

    1001111010012 = 1001111010012 = 4751811111100002 = 0011111100002 = 17608

    La conversin de octal a binario se realiza convirtiendo por separado cada dgitodel nmero octal. Para ello puede ayudarse del cuadro 3.1. Por ejemplo:

    47518 = 1001111010012 = 1001111010012

    3.5.2. Conversin entre hexadecimal y binario

    La conversin tanto de binario a hexadecimal como de hexadecimal a binario serealiza de la misma forma que entre binario y octal, salvo que se agrupan los bitsde cuatro en cuatro. As, para convertir de binario a hexadecimal se hace:

    1001111001112 = 1001111001112 = 9E716

    Y de hexadecimal a binario:

    1CA116 = 00011100101000012 = 00011100101000012 = 11100101000012

    int main(void){ printf("Hola\n");

    } return 0;

    Realice el ejercicio 3

  • 3 Sistemas de numeracin 43

    ai + bi + ci ci+1 si0 0 0 0 00 0 1 0 10 1 0 0 10 1 1 1 01 0 0 0 11 0 1 1 01 1 0 1 01 1 1 1 1(a) Tabla de sumar

    ai (bi + ci) ci+1 si0 0 0 0 00 0 1 1 10 1 0 1 10 1 1 1 01 0 0 0 11 0 1 0 01 1 0 0 01 1 1 1 1

    (b) Tabla de restar

    ai bi si0 0 00 1 01 0 01 1 1

    (c) Tabla de multiplicar

    Cuadro 3.2: Tablas de operaciones en binario

    3.5.3. Conversin de nmeros con parte fraccionaria

    Si el nmero binario contiene una parte fraccionaria, para convertirlo a octal oa hexadecimal los grupos de bits se realizan a partir de la coma binaria. Para laparte fraccionaria puede ser necesario aadir ceros a la derecha para completar ungrupo. Para ilustrar el mtodo se muestran a continuacin dos ejemplos, uno deconversin a octal y otro a hexadecimal.

    10111011001,01112 = 010111011001 ,0111002 = 2731,34810111011001,01112 = 010111011001 ,01112 = 5D9, 716

    3.5.4. Hexadecimal vs. octal

    En la prctica se usa principalmente el sistema hexadecimal frente al octaldebido a que en los ordenadores los bits se agrupan en palabras con un nmerode bits mltiplo de 4.6 Por ello, cualquiera de estos nmeros se puede convertir ahexadecimal sin necesidad de aadir ceros por la izquierda.

    3.6. Operaciones matemticas con nmeros binarios

    Las operaciones en binario se realizan de la misma forma que en base 10. Esms, al disponer slo de los smbolos 0 y 1, las tablas de sumar, restar y multiplicarson mucho ms simples. El nico problema es que al tener los nmeros un mayornmero de cifras las operaciones son ms largas y tediosas.

    3.6.1. Suma de nmeros binarios

    Para sumar dos nmeros binarios el procedimiento es el mismo que para sumarnmeros en base 10: se va sumando dgito a dgito, empezando por los dos dgitosmenos signicativos. Si en la suma se produce un acarreo, ste se suma a los

    6Por ejemplo en un PC se pueden usar nmeros de 8, 16, 32 y 64 bits.

  • 44 Sistemas de numeracin

    dos siguientes bits. La tabla usada para realizar la suma es la mostrada en elcuadro 3.2(a), en donde ai y bi son los dgitos i de cada nmero, ci es el acarreo quellega a esos dgitos, si es el resultado de la suma para el bit i y ci+1 es el acarreo quese enva a la cifra siguiente. Para ilustrar el proceso nada mejor que un ejemplo:

    +

    1 1 10 1 1 0 1 1 0 00 1 0 0 1 1 1 01 0 1 1 1 0 1 0

    Para empezar se suman los dos bits menos signicativos: 0+0, y el resultado es 0con acarreo 0. A continuacin se suman los dos siguientes bits: 0+ 1, obtenindosecomo resultado un 1 con acarreo 0. Despus se suma 1 + 1 y se obtiene comoresultado 0 con un acarreo de 1, A continuacin se suman los dos siguientes bitsms el acarreo anterior: 1 + 1 + 1, obtenindose un 1 como resultado y un 1 comoacarreo. Como puede comprobar en el ejemplo el proceso continua as hasta elltimo dgito.

    Desborde en la suma

    En la seccin 3.4 se ha comentado que en un sistema digital el nmero de bitspara representar un nmero binario es jo, por lo que slo puede representarseun rango de nmeros naturales. Cuando se realiza una suma de dos nmeros elresultado suele representarse con el mismo nmero de bits que los operandos.7 Noobstante esto presenta un grave problema, ya que el resultado de una suma puedesalirse del rango si ambos sumandos son sucientemente grandes. Por ejemplo elresultado de sumar 200 + 200 con 8 bits en binario es:

    +

    1 11 1 0 0 1 0 0 01 1 0 0 1 0 0 0

    1 1 0 0 1 0 0 0 0

    que como se puede apreciar necesita 9 bits para representarse. Si el resultadose trunca a 8 bits porque el sistema digital que se est usando es de 8 bits, elresultado obtenido ser: 100100002 = 144 que no se parece en nada al resultadoreal de 400. Por tanto en un sistema digital ha de detectarse cundo se produce undesbordamiento para no tener en cuenta el resultado.8

    7En la prctica no se realizan operaciones aisladas, sino una serie de clculos en los cuales elresultado de una operacin se utiliza como operando para la siguiente. Piense por ejemplo en unprograma de ordenador. Si cada vez que se hace una suma hay que aadir un bit para garantizarque no se desborda el resultado, al nal se acabara con un elevado nmero de bits. Por tanto, loms prctico es usar el mismo nmero de bits para todos los nmeros dentro del sistema digital yhacer que dicho nmero de bits sea suciente para representar todas las magnitudes con las queva a trabajar el sistema digital.

    8Esto es lo que ocurre en una calculadora digital: si intenta sumar dos nmeros muy grandesla calculadora muestra un error en lugar del resultado.

  • 3 Sistemas de numeracin 45

    La forma de detectar el desbordamiento en la suma es comprobar si se produceun acarreo al sumar los dos bits ms signicativos. Si no se produce el resultado escorrecto y si se produce es que ha ocurrido un desbordamiento.

    3.6.2. Resta de nmeros binarios

    Al igual que la suma, el algoritmo de la resta es el mismo en binario que endecimal, slo que ahora se usa la tabla 3.2(b). Al igual que con la suma el procesoes restar bit a bit empezando por los dos bits menos signicativos. La principaldiferencia con la suma es que el acarreo se le suma al sustraendo9 y dicho resultadose resta del minuendo. El acarreo se produce tanto si al sumar el bit de acarreo albit del sustraendo se produce un acarreo como si el bit del minuendo es un 0 y elresultado de bi + ci es 1. Ilustremos el proceso con un ejemplo:

    1 1 1 1

    0 1 1 0 1 1 0 00 1 0 0 1 1 1 00 0 0 1 1 1 1 0

    En primer lugar se hace la resta 0 0, obtenindose 0 como resultado y 0como acarreo. Hasta aqu nada interesante. Para la siguiente cifra es necesariorestar 0 1, con lo que se obtiene 1 como resultado y se produce un acarreo a lasiguiente cifra. A continuacin, en primer lugar se suma el acarreo a la cifra delminuendo, obtenindose un 0 y producindose un acarreo a la siguiente cifra. Ensegundo lugar se resta 1 0 producindose 1 como resultado. Alternativamente aeste proceso puede consultarse la tabla 3.2(b) para obtener el resultado de la restade 1 1 con acarreo de entrada ci igual a 1 (que es la ltima la de dicha tabla).Repitiendo este proceso puede comprobar que se obtiene el resultado mostrado enel ejemplo.

    Desborde en la resta

    El algoritmo para restar mostrado slo permite realizar la resta cuando el minu-endo es mayor que el sustraendo. Por tanto en este caso nunca se producir ningnerror.

    int main(void){ printf("Hola\n");

    } return 0;

    Realice el ejercicio 43.6.3. Multiplicacin de nmeros binarios

    El algoritmo de la multiplicacin no iba a ser menos: al igual que la suma y laresta, multiplicar nmeros binarios se realiza de la misma manera que con nmerosdecimales. Adems la tabla de multiplicar es mucho ms sencilla en binario que endecimal, como se puede ver en 3.2(c). Por ejemplo, la multiplicacin de 1010 por1101 se realiza:

    9Recuerde que si se hace la operacin a b, al nmero a se le denomina minuendo y al bsustraendo.

  • 46 Sistemas de numeracin

    1 0 1 01 1 0 11 0 1 0

    0 0 0 01 0 1 0

    1 0 1 01 0 0 0 0 0 1 0

    En primer lugar se multiplica el multiplicando por la primera cifra del multipli-cador.10 Como es un 1, el resultado es 1010. A continuacin se multiplica el multi-plicando por la segunda cifra del multiplicador, escribiendo el resultado desplazadouna cifra a la izquierda. Como en el ejemplo la segunda cifra es un 0, la segunda laes 0000. El algoritmo continua as hasta llegar a la ltima cifra del multiplicador.Para terminar se suman los cuatro productos parciales. Como puede observar lamultiplicacin en binario es mucho ms fcil que en decimal, pues al ser las cifrasdel multiplicador 0 o 1 los productos parciales son o 0 o el multiplicando.

    Desborde en la multiplicacin

    Como puede deducirse del algoritmo anterior, si se multiplican dos nmeros den bits, el resultado necesita 2 n bits para representarse. Si se trunca el resultadoa n bits se producir un desbordamiento si alguno de los n bits ms signicativosestn a 1. En el ejemplo anterior se ha realizado la multiplicacin 1013, obtenin-dose 130. Como puede observarse se han multiplicado dos nmeros de 4 bits y elresultado ha necesitado 8 bits para representarse. Si slo se dispusiera de 4 bitspara el resultado, se habra obtenido un 2 como resultado, que obviamente es err-neo; lo cual se detecta viendo que hay bits a 1 en los 4 bits ms signicativos delresultado. Si en cambio se multiplica 7 2:

    0 1 1 10 0 1 00 0 0 01 1 1

    0 0 0 00 0 0 00 0 0 1 1 1 0

    no se produce desbordamiento, cuando el resultado se representa con 4 bits.

    int main(void){ printf("Hola\n");

    } return 0;

    Realice los ejercicios 5y 6 3.7. Representacin de nmeros enteros

    Para distinguir entre nmeros positivos y negativos, nosotros usamos dos sm-bolos adicionales: el + para los positivos, omitido normalmente en la prctica, y el

    10En el ejemplo anterior el multiplicando es 1010 y el multiplicador 1101.

  • 3 Sistemas de numeracin 47

    para los negativos. En un sistema digital, como se ha dicho anteriormente, slo ex-isten dos smbolos: el 0 y el 1; por lo que es necesario buscar formas de representarlos nmeros negativos sin usar los smbolos + y .

    3.7.1. Representacin de nmeros en signo-magnitud

    La primera tcnica que se nos viene a la cabeza para representar nmeros consigno es usar un bit para representar el signo, asignando el 0 para el + y el 1 parael . Este bit, al que se denomina bit de signo, se escribe al principio del nmerobinario (bit ms signicativo). As, si se dispone de 4 bits, se reserva el primero parael signo y los tres restantes para la magnitud. Por ejemplo, el +2 se representar eneste caso como 0010 y el 2 como 1010.

    A la vista del ejemplo anterior cabe preguntarse cmo sabe un sistema digital sila secuencia de bits 1010 es un 2 o un 10. La respuesta es que el sistema digitalno lo sabr nunca, pues no es un ser inteligente. Somos nosotros los encargados deinterpretar cada secuencia de bits sabiendo de antemano cmo estn codicados. Enel ejemplo anterior, sabiendo que la secuencia de bits 1010 representa un nmero ensigno magnitud podremos obtener su valor. Para ello, al ser el bit ms signicativoun 1 sabemos que es un nmero negativo. Para obtener la magnitud tomamos losbits restantes (010) y los convertimos a decimal, obteniendo un 2. Por tanto, si lasecuencia de bits 1010 representa un nmero en signo-magnitud, dicho nmero esel -2.

    La desventaja de este sistema de representacin es que es complejo operar conl, tal como se discute en la seccin 3.9.1. Por ello se han desarrollado otros mtodosque aunque son menos intuitivos, facilitan mucho las operaciones.

    int main(void){ printf("Hola\n");

    } return 0;

    Realice el ejercicio 73.7.2. Representacin de nmeros en complemento a dos

    Esta tcnica es la ms usada en la prctica, pues como se ver ms adelante sim-plica las operaciones matemticas entre nmeros con signo. Esta representacinse basa en obtener el complemento a dos de los nmeros negativos, por lo que antesde empezar conviene mostrar cmo se obtiene el complemento a dos de un nmero.

    Complemento a dos

    Para obtener el complemento a dos de un nmero binario existen dos algoritmos:El primero consiste en invertir todos los bits del nmero binario y sumar unoal resultado. Por ejemplo, para obtener el complemento a dos de 0110, enprimer lugar se invierten todos los bits:

    0 1 1 01 0 0 1

    Al resultado obtenido se le suma 1:

  • 48 Sistemas de numeracin

    +

    11 0 0 10 0 0 11 0 1 0

    El segundo mtodo es mucho ms fcil y consiste en copiar cada bit delnmero de derecha a izquierda hasta que se encuentre el primer 1. A par-tir de ese momento se copia el inverso de cada bit. En el ejemplo anterior,para obtener el complemento de 0110, se empieza copiando el nmero hastaencontrar el primer 1, con lo que en ese momento habremos escrito:

    0 1 1 01 0

    El resto de bits se copian invertidos, obteniendo al nal el complemento a dosdel nmero:

    0 1 1 01 0 1 0

    Ambos algoritmos son sencillos de realizar, pero quizs el lector no entienda enrealidad qu es lo que se est haciendo. Pues bien, obtener el complemento a dosde un nmero x no es ms que calcular 2n x en donde n es el nmero de bits delnmero x. Por ejemplo, para obtener el complemento a dos del nmero de 4 bits0110 hay que hacer la siguiente operacin:

    1 1 11 0 0 0 00 0 1 1 00 1 0 1 0

    Lo que ocurre es que la resta anterior es difcil de hacer, tanto para nosotros co-mo para nuestros queridos circuitos digitales. Ahora bien, teniendo en cuenta que10000 = 1111+ 1, la anterior operacin se puede descomponer en 1111 0110+ 1.La ventaja de hacer esta operacin as es que, tal como se aprecia en el ejemplo:

    1 1 1 10 1 1 01 0 0 1

    restar 1111 0110 es equivalente a invertir los bits del sustraendo. Esto es ciertosiempre que el minuendo sea todo unos, pues no se producen acarreos entre cifrasy 1 0 = 1 y 1 1 = 0.

    Para terminar de calcular el complemento a dos se suma 1 al resultado anterior:

    +

    11 0 0 10 0 0 11 0 1 0

  • 3 Sistemas de numeracin 49

    En denitiva, con este truco hemos conseguido realizar la operacin 2nx invirtiendotodos los bits y sumando 1 en lugar de hacer una resta.

    Representacin de nmeros enteros en complemento a dos

    Para representar un nmero entero en complemento a dos se sigue el siguientealgoritmo:

    Si el nmero es positivo, se representa en binario. En este caso el nmero debits usados para representar el nmero ha de ser suciente para que el bitms signicativo sea un 0.

    Si el nmero es negativo se obtiene el complemento a dos del valor absolutodel nmero. En este caso el nmero de bits usados para representar el nmeroha de ser suciente para que el bit ms signicativo sea un 1.

    En ambos casos, al igual que en los nmeros representados en signo-magnitud, albit ms signicativo se le denomina bit de signo y es 0 cuando el nmero es positivoy 1 cuando es negativo.

    Lo mejor como siempre es ver un ejemplo:Representar los siguientes nmeros en complemento a dos usando 4 bits:

    +3. Como es positivo se representa en binario sin ms. Por tanto +3 se repre-senta en complemento a 2 como 0011C2.11

    -3. Como es negativo, ha de obtenerse el complemento a 2 de su mdulo. Portanto es necesario obtener el complemento a 2 de 00112, que es 1101C2. Aspues -3 se representa en complemento a 2 como 1101C2.

    A veces es frecuente tener que realizar el proceso inverso, es decir, a partir deuna representacin en complemento a dos de un nmero, obtener su valor. Para ellobasta con seguir el algoritmo presentado antes a la inversa. Para ilustrar el procesonada mejor que realizar el siguiente ejercicio:

    Ejercicio

    Imagnese que est depurando un programa y en la memoria del ordenador leedos posiciones de memoria en las que sabe que hay almacenados dos nmeros encomplemento a dos. Si los nmeros en cuestin son:

    00001011C211111011C2

    De qu nmeros se trata?Para obtener el nmero entero representado por cada secuencia de bits, en

    primer lugar hay que averiguar si el nmero es positivo o negativo. Esto viene dadopor el bit ms signicativo (bit de signo). Si dicho bit es un 0 el nmero es positivo,y si es un 1 es negativo. Si el nmero es positivo basta con convertir el nmero

    11En este libro, a los nmeros representados en complemento a dos se les pondr un C2 comosubndice.

  • 50 Sistemas de numeracin

    binario a decimal. As, como el primer nmero del ejemplo tiene el bit de signo a 0,ste es positivo y por tanto se trata del:

    00001011C2 = 0 27 + 0 26 + 0 25 + 0 24 + 1 23 + 0 22 + 1 21 + 1 20 = 11

    En cambio el segundo nmero tiene el bit de signo a 1, por lo que en primerlugar hay que obtener su complemento a dos:

    1 1 1 1 1 0 1 10 0 0 0 0 1 0 1

    El resultado anterior es el valor absoluto del nmero en binario, por lo que hay queconvertirlo a decimal:

    000001012 = 0 27 + 0 26 + 0 25 + 0 24 + 0 23 + 1 22 + 0 21 + 1 20 = 5

    Por tanto el nmero 11111011C2 es el 5.

    int main(void){ printf("Hola\n");

    } return 0;

    Realice los ejercicios 8y 9 Todo esto est muy bien, pero. . . Qu estamos haciendo?

    La mecnica expuesta para representar nmeros en complemento a dos puedeparecer sin sentido, pero al contrario es una idea genial. Lo que se persigue con estanotacin es facilitar la realizacin de sumas con nmeros enteros. Como se ha dichoantes, en complemento a dos un nmero negativo x se representa como 2n x.Para que la notacin funcione, si se hace la operacin x + (x) el resultado ha deser cero. En la representacin en complemento a dos esta operacin se traduce en:

    x + (2n x) = 2n (3.1)

    Pero 2n equivale a 0 si las operaciones se realizan con nmeros de n bits y no setiene en cuenta el acarreo. Por ejemplo, si x = 0010C2, la operacin anterior ser,teniendo en cuenta que 2 en complemento a dos se representa como 1110C2:

    +

    1 10 0 1 01 1 1 0

    1 0 0 0 0

    Pero como tanto los operandos como el resultado son nmeros son de 4 bits y notenemos en cuenta el acarreo nal, el resultado de la operacin anterior es 0000C2,como debe ser. Ntese que en esta operacin el acarreo nal no indica desborde, talcomo ocurre en la suma sin signo mostrada en la seccin 3.6.1. En la seccin 3.9.2se muestra cmo detectar el desbordamiento cuando se suman nmeros con signorepresentados en complemento a dos.

  • 3 Sistemas de numeracin 51

    3.7.3. Representacin de nmeros en exceso

    Otra tcnica usada en la prctica para representar nmeros enteros consiste ensumar a todos los nmeros una cantidad ja y representar en binario el resultado.La cantidad ja, denominada exceso o sesgo, puede ser o bien 2n1 o bien 2n1 1,en donde n es el nmero de bits usados para representar el nmero. En la prcticaeste tipo de representacin se usa para los exponentes de los nmeros en comaotante, usndose como exceso el valor 2n1 1.

    Veamos algunos ejemplos con nmeros de 8 bits tomando como exceso el valor:2n1 1 = 27 1 = 127 :

    27: 27 + 127 = 154. Convirtiendo 154 a binario se obtiene:154 2

    770 2381 2

    190 29 2

    411

    20 2 2

    10 201

    y por tanto 27 en exceso 127 se representa como: 10011010XS127.12

    -27: 27 + 127 = 100. Convirtiendo 100 a binario se obtiene 11001002. Portanto -27 en exceso 127 se representa como: 01100100XS127. Ntese quese ha aadido un 0 a la izquierda para obtener los 8 bits requeridos en larepresentacin.-128: 128 + 127 = 1. Como 1 no puede representarse en binario, pues enbinario puro slo se pueden representar nmeros naturales, -128 no puederepresentarse en exceso 127.

    int main(void){ printf("Hola\n");

    } return 0;

    Realice el ejercicio 103.8. Rangos en los nmeros con signo

    El rango disponible para representar nmeros con signo se reparte ms o menosde igual forma para los nmeros positivos y para los nmeros negativos, aunquecon ligeras diferencias en funcin del mtodo usado para representarlos. As, es fcildemostrar que el rango para n bits es igual a:

    2n1 1 2n1 1 para nmeros codicados en signo-magnitud.2n1 2n1 1 para nmeros codicados en complemento a dos.2n1 1 2n1 para nmeros codicados en exceso 2n1 1.

    12En este libro, a los nmeros representados en exceso 127 se les pondr XS 127 como sub-ndice.

  • 52 Sistemas de numeracin

    3.9. Operaciones matemticas con nmeros con signo

    Las operaciones descritas en el apartado 3.6 slo son vlidas para nmerosbinarios naturales (sin signo). Para realizar operaciones de nmeros enteros esnecesario modicar los algoritmos segn el tipo de codicacin usada.

    3.9.1. Operaciones con nmeros en signo-magnitud

    Para realizar una suma de dos nmeros en signo-magnitud es necesario estudiaren primer lugar los signos de ambos nmeros y a continuacin hacer una suma ouna resta en funcin de stos. Por ejemplo si se desea hacer la siguiente operacinentre dos nmeros codicados en signo-magnitud con 4 bits:

    0011 + 1010 (3.2)

    En primer lugar se observa que el segundo nmero es negativo (2), por lo que laoperacin a realizar ser:

    0011 0010 = 0001 (3.3)Para realizar una resta el proceso es el mismo, por lo que no merece la pena em-plear ms tiempo en ello. Para multiplicar dos nmeros el proceso es similar: semultiplican las magnitudes y el signo resultante se obtiene estudiando el signo delos operandos.

    Aunque esta forma de operar no es complicada para nosotros, si lo es para uncircuito. Por ello, tal como se mencion en la seccin 3.7.1, los nmeros codicadosen signo-magnitud prcticamente no se usan en la prctica.

    3.9.2. Operaciones con nmeros en complemento a dos

    La notacin en complemento a dos se desarroll precisamente para simplicarlas operaciones con nmeros enteros. Como se ha mostrado en la seccin 3.7.2,para sumar nmeros codicados en complemento a dos se sigue el algoritmo desuma en binario y se desprecia el acarreo nal cuando se produce. Por ejemplo, lasuma 27 + (36) con nmeros de 8 bits es:

    +

    1 10 0 0 1 1 0 1 11 1 0 1 1 1 0 01 1 1 1 0 1 1 1

    Y el resultado, teniendo en cuenta que es un nmero representado en complementoa dos, es 9, tal como era de esperar.

    Otra de las ventajas de usar nmeros en complemento a dos es que las restas sepueden hacer sumando el sustraendo cambiado de signo, no siendo necesario usarel algoritmo de resta que tan difcil suele resultar de aplicar. Es decir, suplantamosel algoritmo de resta por el de obtener el complemento a dos (muy fcil) y el de sumar(ms fcil que el de restar). Esta simplicacin no solo es buena para nosotros, sino

  • 3 Sistemas de numeracin 53

    que tambin lo es para los circuitos digitales, tal como veremos ms adelante. Porejemplo, para restar 00001111 00000110, lo que en realidad hacemos es:

    1. Obtenemos el complemento a dos del sustraendo: 11111010C22. Sumamos el minuendo ms el sustraendo:

    +

    1 1 1 1 1 10 0 0 0 1 1 1 11 1 1 1 1 0 1 0

    1 0 0 0 0 1 0 0 13. Despreciamos el acarreo nal, con lo que el resultado es 00001001C2, que es

    9, como era de esperar despus de restar 15 6.

    Desborde en la suma en complemento a dos

    Al igual que en la suma sin signo, si los nmeros a sumar son demasiadograndes puede ocurrir que el resultado no pueda representarse con el nmero de bitsnito usado para representarlo. Por ello despus de realizar una suma es necesariovericar si se ha producido un desbordamiento para marcar el resultado comoerrneo. Existen dos formas de evaluarlo, que como siempre es mejor discutir conun ejemplo: realicemos la suma de 103 + 103 en complemento a dos usando 8 bits:

    +

    1 1 1 1 10 1 1 0 0 1 1 10 1 1 0 0 1 1 11 1 0 0 1 1 1 0

    El resultado obtenido es 11001110C2, que en decimal es 50 en lugar de 206, locual es una prueba de que algo no ha ido bien con la suma. El problema es que unsistema digital no es capaz de darse cuenta de este tipo de error si no buscamosuna forma fcil de averiguarlo. Existen dos maneras:

    Si el signo de ambos sumandos es el mismo y el del resultado es distintose ha producido un desbordamiento. Obviamente si despus de sumar dosnmeros positivos obtenemos uno negativo es seal de que algo no ha idobien. De la misma forma si sumamos dos nmeros negativos el resultado hade ser otro nmero negativo y si nos sale positivo ms vale que lo tiremos ala basura. Si el signo de ambos sumandos es distinto obviamente el resultadoser menor que ambos sumandos, por lo que es imposible que se produzcaun desbordamiento.Otra alternativa para detectar el desbordamiento es analizar los dos ltimosacarreos. Si son iguales es seal de que ha ido todo bien, pero si son distintoses que ha ocurrido un desbordamiento. Si volvemos al ejemplo anterior:

    +

    1 1 1 1 1

    0 1 1 0 0 1 1 10 1 1 0 0 1 1 11 1 0 0 1 1 1 0

    0Dos ultimos acarreos.

  • 54 Sistemas de numeracin

    Vemos que los dos ltimos acarreos son distintos, lo que indica que se ha producidoun desbordamiento y por tanto el resultado no es correcto. Si en cambio se realizala suma 103 + (2):

    +

    1 1 1 1 11 0 0 1 1 0 0 11 1 1 1 1 1 1 0

    1 1 0 0 1 0 1 1 1

    Dos ultimos acarreos.

    Los dos ltimos acarreos son iguales y por tanto el resultado es correcto, lo cualpuede comprobar usted mismo convirtiendo el resultado a decimal.

    int main(void){ printf("Hola\n");

    } return 0;

    Realice el ejercicio 113.9.3. Extensin del signo

    En ocasiones es necesario aumentar el nmero de bits con el que se representaun nmero para extender su rango. En este caso, si el nmero es sin signo bastacon aadir ceros por la izquierda hasta completar el nmero de bits. Por ejemplosi tenemos el nmero 7 representado con 4 bits (0111) y queremos representarlocon 8 bits, basta con aadir cuatro ceros por la izquierda (0000 0111). Como puedecomprobar fcilmente, el nmero resultante sigue siendo el 7.

    Si queremos aumentar el nmero de bits de un nmero con signo representadoen complemento a 2, el proceso es ligeramente distinto. Si el nmero es positi-vo, basta con aadir ceros por la izquierda, tal como acabamos de hacer con losnmeros sin signo. Si el nmero es negativo la cosa cambia. Si partimos de unnmero cualquiera, como por ejemplo el -2 expresado con 4 bits (1110) y queremosexpresarlo con 8 bits; vemos que si aadimos ceros por la izquierda obtenemos elnmero 0000 1110, que es el 14. Si por el contrario aadimos unos por la izquierdaobtenemos el nmero 1111 1110, que como puede comprobar es el nmero -2.

    Resumiendo, para aumentar el nmero de bits de un nmero en complementoa 2 basta con extender por la izquierda el bit de signo hasta completar el nmerode bits deseado. A este proceso se le conoce como extensin de signo.

    Veamos algunos ejemplos:0110 a 8 bits: 0000 0110

    1101 a 16 bits: 1111 1111 1111 1101

    3.9.4. Multiplicacin de nmeros en complemento a 2

    Al igual que con la suma, el algoritmo de multiplicacin tambin es vlido connmeros en complemento a dos. No obstante antes de realizar la multiplicacin esnecesario extender el signo de ambos nmeros para que las sumas intermedias serealicen siempre con el nmero de bits del resultado (que recuerde que es la suma delos nmeros de bits de ambos operandos). Una vez realizada la multiplicacin slose tienen en cuenta los bits menos signicativos del resultado. Lo mejor es mostrarun ejemplo: si se desea multiplicar 2 5, estando ambos representados con 4

  • 3 Sistemas de numeracin 55

    bits; el punto de partida es 1110C2 0101C2. Como el resultado ha de expresarsecon 8 bits, es necesario extender el signo de ambos operandos antes de realizar lamultiplicacin:

    1 1 1 1 1 1 1 00 0 0 0 0 1 0 11 1 1 1 1 1 1 0

    0 0 0 0 0 0 0 01 1 1 1 1 1 1 0

    0 0 0 0 0 0 0 00 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 00 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 00 0 0 0 1 0 0 1 1 1 1 0 1 1 0

    Del resultado de la multiplicacin anterior slo se toman los 8 bits menos signica-tivos, obtenindose entonces 11110110C2, que como puede comprobar es -10.

    Desborde en la multiplicacin de nmeros en complemento a 2

    Al igual que con la multiplicacin de nmeros naturales, si el resultado se expre-sa con n+m bits, siendo n ym el nmero de bits del multiplicando y el multiplicador;no se producir ningn desbordamiento. Si se desea truncar el nmero de bits delresultado, habr que vericar que el resultado est dentro del rango. Para ello bas-ta con vericar que los bits que se eliminan del resultado son todos iguales al bitde signo del nmero resultante. En el ejemplo anterior, si queremos expresar elresultado original (11110110C2) con 4 bits vemos que los 4 bits que se eliminan(1111) aunque iguales entre s son distintos al bit de signo del nmero resultante(0110C2). Por tanto se produce un desbordamiento, lo cual es fcil de comprobar,ya que 0110C2 es 6, en lugar de -10.

    Si por ejemplo se realiza la multiplicacin de 2 3 con 4 bits:

    1 1 1 1 1 1 1 00 0 0 0 0 0 1 11 1 1 1 1 1 1 0

    1 1 1 1 1 1 1 00 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 00 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 00 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 00 0 0 0 0 1 0 1 1 1 1 1 0 1 0

  • 56 Sistemas de numeracin

    El resultado en 8 bits es 11111010C2, que en este caso se puede truncar a 4 bits,ya que los cuatro bits ms signicativos coinciden con el bit de signo del nmerotruncado. El resultado es 1010C2 que como puede comprobar es -6.

    int main(void){ printf("Hola\n");

    } return 0;

    Realice el ejercicio 12

    3.10. Otros cdigos binarios

    A la hora de representar un nmero en binario lo primero que se nos viene ala cabeza es representar dicho nmero en base 2, tal como hemos hecho en lassecciones anteriores. No obstante existen otros mtodos para codicar nmeros enbinario que presentan ciertas ventajas.

    3.10.1. Cdigos BCD

    La dicultad de convertir un nmero decimal a uno binario viene porque esnecesario convertir el nmero como un todo, tal como hemos visto en la seccin 3.3.Para facilitar la conversin, en los nmeros en BCD se codica cada uno de susdgitos por separado. De ah viene precisamente el nombre de BCD, que son lassiglas del ingls Binary Coded Decimal o Decimal Codicado en Binario.

    As pues, para codicar un nmero en BCD se codica en binario cada uno delos dgitos decimales que forman el nmero. As, para codicar el nmero 127, loque hacemos es codicar por un lado el 1, luego el 2 y luego el 7. Como en el sistemadecimal tenemos 10 smbolos (del 0 al 9), son necesarios 4 bits para codicarlos.El problema es que con 4 bits tenemos 16 posibles combinaciones, de las cualesslo vamos a usar 10. Esto hace que en total se puedan hacer 2,9 1010 posiblesasignaciones entre el cdigo binario y el dgito decimal.13 Afortunadamente en laprctica slo se usan tres asignaciones, las cuales se muestran en el cuadro 3.3

    En BCD natural se codica cada dgito segn su valor binario. El resto de cdigosbinarios (del 1010 al 1111) no se usan y por eso se han marcado con un guin en elcuadro. En el cdigo Aiken los cinco primeros dgitos decimales se codican segnsu valor, pero los otros 5 se codican sumndole 6. Esto permite que la asignacinde cdigos binarios sea simtrica y facilita la operacin matemtica del complementoa 10, usada para representar nmeros negativos al igual que el complemento a 2 delos nmeros binarios. El cdigo XS-3 consigue la misma simetra que el Aiken perosumando 3 a todos los valores.

    Para ilustrar el proceso de codicacin, nada mejor que ver algunos ejemplos:Codicar 127 en BCD Natural, BCD Aiken y BCD XS-3. Usando el cuadro 3.3codicamos cada dgito por separado:

    BCD Natural: 0001 0010 0111. BCD Aiken: 0001 0010 1101. BCD XS-3: 0100 0101 1010.

    13Las posibles asignaciones se calculan como las variaciones de 16 elementos tomados de 10 en10, que vienen dadas por la frmula 16!/(16 10)!

  • 3 Sistemas de numeracin 57

    B3B2B1B0 BCD Natural BCD Aiken BCD XS-30 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 2 2 0 0 1 1 3 3 00 1 0 0 4 4 10 1 0 1 5 20 1 1 0 6 30 1 1 1 7 41 0 0 0 8 51 0 0 1 9 61 0 1 0 71 0 1 1 5 81 1 0 0 6 91 1 0 1 7 1 1 1 0 8 1 1 1 1 9

    Cuadro 3.3: Cdigos BCD

    Convertir los siguientes nmeros BCD a decimal. El proceso a seguir es el in-verso del ejemplo anterior, teniendo en cuenta qu cdigo BCD usa el nmero:

    1001 0110 0011, teniendo en cuenta que est codicado en BCDNatural:963.

    0100 1011, teniendo en cuenta que est codicado en BCD Aiken: 45

    0100 1000 1100 1011, teniendo en cuenta que est codicado en BCDXS-3: 1598

    int main(void){ printf("Hola\n");

    } return 0;

    Realice los ejerci-cios 13 y 14

    Nmeros BCD con signo

    En BCD los nmeros con signo se representan en la prctica o en signo magnitudo en complemento a 10. Ambos mtodos son similares a los expuestos para nmerosbinarios.

    Signo magnitud

    Al igual que en binario, se reserva el dgito ms signicativo para el signo (0001para y 0000 para +). As, el nmero +27 se representa en BCD natural como 00000010 0111 y el -27 como 0001 0010 0111.

  • 58 Sistemas de numeracin

    Complemento a 10

    El complemento a 10 de un nmero x se calcula del mismo modo que el com-plemento a 2 de los nmeros binarios: 10n x, siendo n el nmero de dgitos delnmero x. Por ejemplo el complemento a 10 del nmero 127 se calcula como:

    1000 127

    873

    Por tanto, el complemento a 10 del nmero BCD natural 0001 0010 0111 es el 10000111 0011.

    Para codicar nmeros enteros en BCD usando complemento a 10 el proceso esel mismo al seguido con los nmeros binarios:

    Si el nmero es positivo, se codica dicho nmero en BCD. En este caso hayque asegurarse que el dgito mas signicativo sea menor que 5.

    Si el nmero es negativo, se codica en BCD el complemento a 10 del nmero.En este caso el dgito ms signicativo ha de ser mayor o igual que 5.

    Por ejemplo, si queremos codicar el nmero +27 en BCD natural usando dosdgitos, como es positivo, se codica tal cual: 0010 0111. Al ser el dgito ms signi-cativo menor que 5 es seal de que el resultado es correcto.

    Para codicar el nmero -27 en BCD natural usando dos dgitos, como es neg-ativo, es necesario codicar su complemento a 10, que es 100 27 = 73. Por tanto-27 se codica como 0111 0011. Nuevamente, como el dgito ms signicativo esmayor que cinco, el resultado es correcto.

    Si nos dan un nmero entero en BCD codicado en complemento a 10 y quer-emos saber de qu nmero se trata, basta con realizar el algoritmo anterior a lainversa, tal como hicimos con los nmeros binarios en complemento a 2.

    En conclusin, como ha podido observar, el complemento a 10 en los nmerosBCD es igual que el complemento a 2 en los nmeros binarios.

    int main(void){ printf("Hola\n");

    } return 0;

    Realice los ejerci-cios 15 y 16 Suma de nmeros en BCD

    El algoritmo para sumar nmeros en BCD es ligeramente distinto al usado parasumar nmeros en binario. Adems dicho algoritmo vara en funcin del cdigo BCDusado. Para sumar nmeros codicados en BCD natural o BCD Aiken, el algoritmoes el siguiente:

    Se suma el nmero dgito a dgito.

    Para cada dgito, si el resultado es un cdigo invlido (los marcados con unguin en la tabla 3.3) o si se produce un acarreo a la siguiente cifra, hay quesumar 6 al resultado anterior.

    Para ilustrar el proceso nada mejor que mostrar un ejemplo. A continuacin serealiza la suma 197 + 385 = 582 en BCD natural:

  • 3 Sistemas de numeracin 59

    0011 0011 11100001 1001 01110011 1000 01010101 0010 1100

    0110 01101000 0010

    La suma del primer dgito da como resultado 1100, que como puede apreciar enla tabla 3.3 es un cdigo invlido. Por tanto se ha sumado 6 al resultado (se hanomitido los acarreos intermedios para no complicar la gura) para obtener un 2,que es el resultado esperado. Ntese que como resultado de esta ltima suma seproduce un acarreo al siguiente dgito, el cual ha de tenerse en cuenta. La suma delsegundo dgito da como resultado 0010, que es un cdigo vlido, pero como se haproducido un acarreo al siguiente dgito, es necesario sumar 6 al resultado anterior;obteniendo un 8 que de nuevo es el resultado esperado. Por ltimo, en la terceracifra el resultado es 0101 que al ser un cdigo vlido y al no haberse producidoacarreo a la siguiente cifra no hace falta realizarle ningn ajuste.

    El algoritmo para nmeros BCD XS-3 es ligeramente distinto y un poco mscomplejo al tener que realizar restas:

    Se suma el nmero dgito a dgito.Para cada dgito, si hay acarreo a la siguiente cifra se suma 3. Si no hayacarreo a la siguiente cifra se resta 3.

    Por ejemplo, la suma 197 + 485 = 682 en BCD XS-3 se realiza:

    1111 1111 00000100 1100 10100111 1011 10001100 1000 0010

    - 0011 + 0011 + 00111001 1011 0101

    Como puede observar, en los dos primeros dgitos la suma ha producido un acarreoa la siguiente cifra, por lo que se ha sumado 3 al resultado. Por el contrario, enel ltimo dgito no se ha producido ningn acarreo, por lo que se ha restado 3 alresultado. El nmero nal ha sido 1001 1011 0101, que si lo convierte a decimalobtendr 682, como era de esperar.

    int main(void){ printf("Hola\n");

    } return 0;

    Realice el ejercicio 173.10.2. Cdigo Gray

    La caracterstica del cdigo Gray es que entre dos nmeros consecutivos slocambia un bit. Si se ja en los diagramas de Karnaugh, las las y columnas estnnumeradas segn este cdigo (00, 01, 11 y 10) para conseguir que entre casillasadyacentes slo diera un bit. La otra aplicacin prctica de los nmeros en cdigoGray son los codicadores angulares. Estos dispositivos permiten medir ngulosmediante unos sensores luminosos y una rueda codicada segn el cdigo Gray,

  • 60 Sistemas de numeracin

    Figura 3.1: Codicador angular.

    tal como se muestra en la gura 3.1. El funcionamiento de estos dispositivos es elsiguiente: unos diodos led (light-sources en la gura) iluminan un disco dividido ensectores, cada uno de los cuales tiene impreso un nmero Gray (0 blanco, 1 negro).El disco por tanto dejar pasar la luz slo en los puntos que estn en blanco, loscuales sern detectados por unos fototransistores (photo-elements en la gura). Lasalida de estos fototransistores ser por tanto el nmero impreso en el disco enel sector que est frente a los detectores. El codicar los sectores en cdigo Graypermite que cuando el disco est entre un sector y el siguiente no se produzcanerrores en la lectura, ya que slo cambiar un bit. Si por el contrario el discose codicase en binario, existiran sectores consecutivos entre los que cambiaranvarios bits. En ese caso, al pasar se un sector a otro, como es imposible que cambienvarios bits a la vez, pasaremos por valores errneos. Por ejemplo, si el disco estuviesecodicado con tres bits, al pasar por ejemplo del sector 011 al 100 puede ocurrirque primero cambie el bit 2 y leamos el cdigo 111, luego el bit 0 y leamos el cdigo110 y por ltimo cambie el bit 1 para obtener el ngulo correcto 100. Si en cambioel disco est codicado en Gray, del 011 pasaremos al nmero 010 y como slocambia el bit 0 no podemos pasar por valores intermedios errneos.

    Conversin entre binario y cdigo Gray

    El algoritmo para convertir un nmero binario a Gray es bien sencillo:El bit ms signicativo del nmero en cdigo Gray coincide con el del nmerobinario.

    Para el resto de bits, el bit i del nmero en cdigo Gray es igual a la XOR entrelos bits i e i + 1 del nmero binario.

  • 3 Sistemas de numeracin 61

    Por ejemplo, para el nmero binario b3b2b1b0 el nmero en cdigo Gray g3g2g1g0se calcula como:

    g3 = b3

    g2 = b3 b2g1 = b2 b1g0 = b1 b0

    Por ejemplo, el nmero binario 0100 se codica en cdigo Gray como 0110.El algoritmo para convertir de Gray a binario es tambin muy simple:

    El bit ms signicativo del nmero binario coincide con el del nmero encdigo Gray.Para el resto de bits, si el bit i del nmero en cdigo Gray es 1, el bit i delnmero binario es el bit i +1 del nmero binario negado. Si por el contrario elbit i del nmero en cdigo Gray es 0, el bit i del nmero binario es el bit i + 1del nmero binario sin negar.

    El algoritmo anterior es en realidad una forma prctica de calcular una seriede operaciones XOR encadenadas. As, la expresin matemtica para convertir elnmero en cdigo Gray g3g2g1g0 a el nmero binario b3b2b1b0 es:

    b3 = g3

    b2 = g3 g2b1 = g3 g2 g1b0 = g3 g2 g1 g0

    As, el nmero en cdigo Gray 0110 se codica en binario como 0100.

    int main(void){ printf("Hola\n");

    } return 0;

    Realice el ejercicio 183.11. Ejercicios

    1. Convierta los siguientes nmeros de binario a decimal:100111012111010002101,101121101,0012

    2. Convierta el nmero 23,57 a binario usando 6 bits para la parte decimal.Calcule tambin el error de cuantizacin cometido.

    3. Convierta el nmero 1001010111101,012 a hexadecimal y a octal.4. Realice las siguientes operaciones en binario usando 8 bits: 78+76, 78+200,

    78 60.5. Justique el algoritmo de multiplicacin expuesto en la seccin 3.6.3. Para

    ello tenga en cuenta la denicin de un sistema de numeracin posicionalexpuesto en la seccin 3.2.

  • 62 Sistemas de numeracin

    6. Multiplique 14 11 en binario usando nmeros de 4 bits. Es posible repre-sentar el resultado tambin con 4 bits?

    7. Represente +77 y -77 en binario signo-magnitud usando 8 bits.8. Represente los nmeros +77, -77, +128 y -128 en complemento a 2 usando

    8 bits.9. Si las siguientes secuencias de bits representan nmeros en complemen-

    to a 2, qu nmeros representan?: 00100110C2, 10010111C2, 11111111C2,01010111C2.

    10. Codique +28 y -28 con 8 bits usando signo-magnitud, complemento a 2 yXS-127.

    11. Realice las siguientes operaciones, indicando cundo el resultado es correc-to y cundo se produce un desbordamiento. Todas las operaciones son connmeros codicados en complemento a dos de 4 bits:a) 1001C2 + 0111C2b) 0101C2 + 1111C2c) 0111C2 + 0001C2d) 1100C2 + 1011C2

    12. Realice las siguientes multiplicaciones usando nmeros en complemento a 2de 4 bits. Indique cuando el resultado puede expresarse slo con 4 bits.a) 1001C2 0111C2b) 0101C2 1111C2c) 0111C2 0010C2d) 1110C2 0011C2

    13. Convierta los siguientes nmeros a BCD Natural, BCD Aiken y BCD XS-3:a) 1267b) 45c) 3987

    14. Convierta los siguientes nmeros de BCD a decimal.a) 0001 1000 1001 0110, sabiendo que est codicado en BCD Natural.b) 0011 1100 1110 0000, sabiendo que est codicado en BCD Aiken.c) 0100 0111 1100 0011, sabiendo que est codicado en BCD XS-3.

    15. Codique los siguientes nmeros enteros en BCD natural en complemento a10 usando nmeros de 4 dgitos:a) 1267b) 45c) -3987d) -5678

  • 3 Sistemas de numeracin 63

    16. Las siguientes secuencias de bits son nmeros enteros codicados en BCDnatural en complemento a 10. Indique qu numero decimal representan.a) 0001 1000 1001 0110.b) 0111 0000 0110 0010.

    17. Realice la suma 398+582 en BCD natural. Para ello convierta ambos suman-dos a BCD natural y realice la suma aplicando el algoritmo mostrado en laseccin 3.10.1, indicando los acarreos intermedios. Repita el ejercicio codi-cando ambos nmeros en BCD XS-3.

    18. Convierta el nmero 1001 de cdigo Gray a binario y el nmero 0111 debinario a cdigo Gray.