matematicas para programadores_william barden

Upload: javier-pinillos

Post on 12-Oct-2015

69 views

Category:

Documents


7 download

TRANSCRIPT

  • 5/29/2018 Matematicas Para Programadores_William Barden

    1/144

  • 5/29/2018 Matematicas Para Programadores_William Barden

    2/144

    Matemticas paraprogramadoresSistemas de numeraciny aritmtica binaria

    William Barden, Jr.

    ANAYA MULTIMEPIA

  • 5/29/2018 Matematicas Para Programadores_William Barden

    3/144

    INFORMATICA PERSONAL-PROFESIONAL

    Ttulo de la obra original:MICROCOMPUTER MATH

    Traduccin: Fernando GarcaDiseo de coleccin: Antonio LaxDiseo de cubierta: Narcs Fernndez

    Reservados todos los derechos. Ni latotalidad ni parte de este libro puedereproduwse o transmitirse por ningn

    procedimiento electrnico o mecnico,incluyendo fotocopia, grabacin magn-tica o cualquier almacenamiento de in-formacin y sistema de recuperacin, sinpermiso escr ito de Ediciones AnayaMultimedia, S. A.

    Copyright 0 1982 by Howard W. Sams & Co., Inc.Indianapolis, IN 46268

    0 EDICIONES ANAYA MULTIMEDIA, S. A., 1986Villafranca, 22.28028 MadridDepsito legal: M. 2579-1986ISBN: 84-7614-070-3Printed in SpainImprime: Anzos, S. A. Fuenlabrada (Madrid)

  • 5/29/2018 Matematicas Para Programadores_William Barden

    4/144

  • 5/29/2018 Matematicas Para Programadores_William Barden

    5/144

    .

    6.

    7.

    8.

    9.

    10 .

    Multiplicacin y divisin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    Zelda aprende cmo desplazar por s misma. Algoritmos de multiplica-cin. Algoritmos de divisin. Ejercicios.

    Mltiple precisin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    iTienen algo que ver las series de Fibonacci con la televisin? Suma yresta empleando mltiple precisin. Multiplicacin en mltiple preci-

    sin. Ejercicios.Fracciones y factores de escala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    Big Ed pesa los nmeros. Fracciones en sistema binario. Operando confracciones en sistema binario. Ejercicios.

    Transformaciones ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    Big Ed y el inventor. Cdigos ASCII. Paso de ASCII a enteros bina-rios. Paso de ASCII a fracciones binarias. Paso de enteros binarios aASCII. Paso de fracciones binarias a ASCII. Ejercicios.

    Nmeros en punto flotante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    . . . y tres mil platos combinados para la nave nodriza... Notacin cient-fica en punto flotante. Uso de potencias de dos en lugar de potenciasde diez. Nmeros en punto flotante de doble precisin. Clculos en losque se emplean nmeros binarios en punto flotante. Ejercicios.

    Apndices :A ) Respuestas a los ejercicios .......................................B) Conversiones binario, octal decimal y hexadecimal ..............C) Tabla de conversin de nmeros en onpl m ntoa dos.........

    Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    ndice alfabtico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

    6

  • 5/29/2018 Matematicas Para Programadores_William Barden

    6/144

    Introduccin

    No pasa mucho tiempo, despus de adquirir un microordenador, sin queel usuario tropiece fatalmente con referencias tales como nmeros bina-rios, valor hexadecimal, efectuar la operacin lgica Y con dos n-meros para obtener el resultado o desplazar el resultado multiplicandopor dos. Algunas veces, estas referencias suponen que el lector conoce elsistema binario y la forma de operar con l; otras, uno tiene la impresinde que el escritor del manual de referencia realmente tampoco sabe demasia-do sobre las operaciones a realizar.

    El objetivo de M at emt i cas para programadores es poner fin a algunos de losmisterios que rodean las operaciones matemticas especiales que se empleanen BASIC y en lenguaje ensamblador. Tales operaciones, como sistemabinario, octal o hexadecimal, operaciones complemento a dos, suma y restade nmeros binarios, indicadores en microordenadores, operaciones lgicas

    y desplazamientos, algoritmos de multiplicacin y divisin, operaciones enmltiple precisin, fracciones, factores de escala y operaciones en puntoflotante, se explican detalladamente a lo largo del libro, junto con ejemplosprcticos y ejercicios de autoevaluacin.

    Si uno puede sumar, restar, multiplicar y dividir con nmeros decimales,entonces podr ejecutar las mismas operaciones en binario o en cualquierotra base numrica, tal como la hexadecimal. Este libro le ensear cmo.

    7

  • 5/29/2018 Matematicas Para Programadores_William Barden

    7/144

    .Tambin ser un excelente compaero en cualquier curso de lengu

    ensamblador o BASIC Avanzado.M at emt i cas para programador es consta de diez captulos. La mayora

    ellos se basan en el material contenido en los que le preceden. Cada captfinaliza con ejercicios de autoevaluacin. Es provechoso realizar los ejcicios porque ayudan a fijar la materia en su mente, pero no nos enfa

    remos con usted si utiliza el libro slo como referencia.Leyendo, se observarn algunas palabras en cursiva. La mayora de e

    son trminos informticos que se definen en el glosario. Utilizndotambin los nefitos pueden entender y sacar provecho de este libro.

    El libro est estructurado como sigue:El captulo 1 trata el sistema binario desde la base e incluye las c

    versiones entre nmeros binarios y decimales, mientras el captulo 2 dcribe los nmeros octales y hexadecimales, y las transformaciones entre e

    bases y los nmeros decimales. Los nmeros hexadecimales se utilizanBASIC y en lenguaje ensamblador.

    Los nmeros con signo y en complemento a dos se incluyen en el ptulo 3. Los complementos a dos es una notacin usada en nmenegativos.

    El captulo 4 trata de los acarreos, errores de desbordamiento e incadores. Estos trminos se usan principalmente en lenguaje mquinen programas en lenguaje ensamblador, pero pueden ser tambin imptantes en programas especiales de BASIC.

    Las operaciones lgicas, como las Y" (AND), (OR) y NO" (NOT)BASIC, se describen en el captulo 5 junto con los tipos de despla

    mientos posibles en lenguaje mquina. Despus, el captulo 6 habla de algoritmos de multiplicacin y divisin, incluyendo operaciones con y signo.

    El captulo 7 describe operaciones en mltiple precisin. Esta pueutilizarse en BASIC y en lenguaje ensamblador para implementar la pcisin ilimitada con cualquier nmero de dgitos.

    El captulo 8 incluye fracciones binarias y factores de escala. Esta mteria es necesaria para entender el formato interno de los nmeros en punflotante en BASIC.

    Seguidamente, los cdigos y las conversiones ASCII, en cuanto se

    fieren a cantidades numricas, se describen en el captulo 9.Finalmente, el captulo 10 proporciona una explicacin de la repres

    tacin de los nmeros en punto flotante en la forma en que stos se utilien muchos intrpretes en el BASIC de Microsoft.

    Despus, en la ltima seccin del libro, el apndice A contiene las rpuestas a las cuestiones de autoevaluacin; el apndice B contiene ulista de nmeros binarios, octales, decimales y hexadecimales del 0 al 10

    8

  • 5/29/2018 Matematicas Para Programadores_William Barden

    8/144

    La lista puede utilizarse para pasar de un tipo de sistema a otro. Por ltimo,el apndice C contiene una lista de los nmeros en complemento a dos del 1 al 128, una referencia que no se encuentra habitualmente en otrostextos; a continuacin, se incluye un glosario de trminos.

    WILLIAM BARDEN, JR.

    9

  • 5/29/2018 Matematicas Para Programadores_William Barden

    9/144

    El sistemabinario: donde

    empieza todoEn el sistema binario, todos los nmeros se representan por una con-

    dicin encendido/apagado. Veamos un ejemplo rpido de binario en trminos fcilmente comprensibles.

    Big Ed aprende binario

    Big Ed Hackenbyte es propietario de Big Eds, un restaurante quesirve comidas rpidas y cenas lentas en el rea cercana a San Jos (California). En esta zona, conocida como Valle del Silicio, hay docenas decompaas que fabrican microprocesadores.

    Ed tiene ocho personas a su servicio: Zelda, Olive, Trudy, ThelmaFern, Fran, Selma y Sidney. Debido a la despersonalizacin existente

    tiene asignados nmeros para la nmina. Los nmeros asignados son:

    Nmero Nmero

    Zelda. . . . . . 0 Fern. 4Olive 1 Fran. 5Trudy 2 Selma. 6Thelma 3 Sidney. 7

    l l

  • 5/29/2018 Matematicas Para Programadores_William Barden

    10/144

    12

    Cuando Big Ed rellen por primera vez el panel de llamadas, tena ocluces, una para cada persona del servicio, como puede verse en la figura 1Un da, sin embargo, Bob Borrow, ingeniero de diseo de una compade microprocesadores conocida como Inlog, llam a Ed.

    Ed, podras ser mucho ms eficiente con tu panel de llamadas, jsabPuedo mostrarte cmo hemos diseado el tabln con uno de nuest

    microprocesadores.

    PANEL DE LLAMADAS ACME

    7 6 5 4 3 2 1 0

    l o o o o o o o

    Figura 1.1. Panel de llamadas de Big Ed

    Ed, interesado en la nueva tecnologa, sigui su consejo. El nuevo disdel tabln de anuncios se muestra en la figura 1.2. Tiene tres luces, ctroladas desde la cocina. Cuando se llama a alguien del servicio, suena timbre; jcmo es posible llamar a alguna de las ocho personas del servipor medio de combinaciones luminosas de las tres luces?

    Figura 1.2. Panel de llamadas en binario

    iVes, Ed? Este panel es muy eficaz. Emplea cinco luces menos que primer panel. Hay ocho combinaciones diferentes de luces. En realidad llamamos permutaciones, pues hay un orden definido en la disposicin de luces. He preparado una tabla de las permutaciones de las luces y la persodel servicio llamada. Dio a Ed la tabla mostrada en la figura 1.3.

    Slo hay ocho permutaciones diferentes de luces, Ed, ni ms ni menEstas luces estn ordenadas en forma binaria. Utilizamos el sistema binaen nuestros ordenadores por dos razones: primero, se ahorra espacio. Red

  • 5/29/2018 Matematicas Para Programadores_William Barden

    11/144

    cimos el nmero de luces de ocho a tres. Segundo, los ordenadores baratoslo ,pueden representar normalmente un estado encendido/apagado, iguaque las luces estn encendidas o apagadas. Hizo una pausa para dar unbocado a su Big Edburger.

    0 0 0 Z E L D A 00 0 0 O L I V E 10 0 0 T R U D Y 20 0 0 T H E L M A 30 0 0 F E R N 40 0 0 F R A N 5 0 0 SE LMA 60 0 0 S I D N E Y 7

    Figura 1.3. Cdigo para el panel

    Dar estos cdigos a mis ayudantes para que los memoricen, dijo E

    Cada persona del servicio slo tiene que memorizar su cdigo, ETe dar la clave, de forma que puedas descifrar qu persona del servicio ellamada, sin necesidad de la tabla.iVes? Cada luz representa una potencia de dos. La luz de la derechrepresenta dos elevado a cero. La siguiente, dos elevado a uno, y la de ma la izquierda es dos elevado a dos. En realidad es muy parecido al sistemdecimal, donde cada dgito representa una potencia de diez. Garabateun ejemplo en el mantel, como muestra la figura 1.4.

    5x100= 57X10 = 7 03x10* =3003 7 50 1

    -1 x = 1x 2 = 01x2 = 45

    Figura 1.4. Comparacin de los sistemas binario y decimal

    De la misma forma que podemos emplear las potencias de diez parnmeros altos, podemos utilizar tantas potencias de dos como queramosPodramos usar treinta y dos luces, si quisiramos. Entonces, para pasar la

    1

  • 5/29/2018 Matematicas Para Programadores_William Barden

    12/144

    tres luces en binario a su equivalente en decimal, habra que sumar la potencia de dos correspondiente a cada luz encendida. Garabate otra figuen el mantel (Fig. 1.5).

    Dgito 22, con un peso de 4

    Dgito 2, con un peso de 2I l Dgito 2O con un peso de 1

    1 0 -0 x 2O =0x1=01 x 2 =1x2=21 x 22 =1x4=4

    6

    NUMERODECIMAL

    EQUIVALENTE

    Figura 1.5. Paso de binario a decimal

    Bueno, parece bastante sencillo, admiti Ed. De derecha a izquierda

    las luces representan 1, 2 y 4. Si tuviramos ms camareros y camareras, laluces representaran 1, 2, 4, 8, 16, 32, 64, 128... Su voz dej de orse, al nser capaz de decir la siguiente potencia de dos.

    Exacto, Ed. Frecuentemente, tenemos el equivalente a ocho o diecisluces en nuestros microprocesadores. No usamos luces, por supuesto; utilzamos semiconductores que estn apagados o encendidos. Dibuj otrfigura en el mantel, que por aquel entonces estaba lleno de diagramas (Fig. 1.6).

    Llamamos bit a cada una de las ocho o diecisis posiciones. Bit una contraccin de dgito binario. Despus de todo, eso es de lo que hemo

    estado hablando; los dgitos binarios forman nmeros binarios, igual que lodgitos decimales forman nmeros decimales. Tu panel representa un nmero de tres bits.

    En 8 bits podemos representar cualquier nmero entre 0 y 1 + 2 ++ 4 + 8 + 16 + 32 + 64 + 128. Sumando todos ellos, se obtiene 255, el mayor nmero que puede ser contenido en 8 bits.

    iQu ocurre con los 16 bits?, pregunt Ed.14

  • 5/29/2018 Matematicas Para Programadores_William Barden

    13/144

    5 3 R c2 6 5 2 ;a ;1 ;1 0 0 0 0 0 0 0 0

    POSICIONES DE 8 BITS

    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0POSICIONES DE 16 BITS

    Figura 1.6. Representacin de 8 y 16 bits

    Te lo puedes imaginar, dijo Bob. Tengo que volver al trabajo dedisear microprocesadores.

    Ed confeccion una lista con todas las potencias de dos hasta quinceEntonces, las sum todas hasta llegar al resultado que muestra la figura 1.7un total de 65,535 -el mayor nmero que pueden contener 16 bits.

    PESOPOSICIONDEL BIT

    :48

    : 66 4

    1 2 8

    2 5 6

    5 1 21 0 2 42 0 4 8

    4 0 9 68 1 9 2

    1 6 3 8 4

    3 2 7 6 8

    01

    2

    345

    78

    91 0

    l l

    1 21 31 4

    1 5

    6 5 5 3 5

    Figura 1.7. Valor mximo de 16 bits

    1

  • 5/29/2018 Matematicas Para Programadores_William Barden

    14/144

    El asunto de los microprocesadores es fcil, dijo Ed con una muecmientras daba a su Big Eds Jumboburger un mordisco de 8 bits.

    Ms sobre bits, bytes y binario

    La explicacin de Bob Borrow del binario condensa muy bien la reprsentacin binaria de los microordenadores. La unidad bsica es un bit dgito binario. Un bit puede estar encendido o apagado. Porque es mucms fcil escribir 0 1, estos dgitos se usan en lugar de encendido/apagadcuando representamos valores binarios.

    Laposicin del bit del nmero binario se refiere a la posicin del dgen el nmero. La posicin del bit en la mayora de los microordenadortiene un nmero asociado, como se muestra en la figura 1.8. Puesto qstas, en realidad, representan una potencia de dos, es conveniente numrarlas de acuerdo con la potencia de dos representada. Elbit de ms aderecha es dos elevado a cero, y la posicin del bit es, por tanto, cerLas posiciones del bit hacia la izquierda se numeran 1 (dos elevado a uno2 (dos elevado a dos), 3, 4, 5, etc.

    NUMERO DE LA POSICION DEL BIT- - - A \

    7 6 5 4 3 2 1 0

    0 0 0 0 0 0 0 0

    Figura 1.8. Numeracin de las posiciones del bit

    En todos los microordenadores actuales, un grupo de ocho bits se denmina un byte. De alguna manera, es obvio el origen de esta palabra si noimaginamos a los primeros ingenieros informticos comiendo en el equivlente de Big Eds

    La memoria de un microordenador viene a menudo indicada por nmero de bytes de que consta.

    Cada byte corresponde aproximadamente a un carcter, como veremen captulos posteriores. Las operaciones de entrada y salida de la memria se hacen generalmente de un byte cada vez.

    N. del T.: Se trata de un juego de palabras entre bite (morder), byte y bit, qadems de dgito binario, en ingls significa mordisco.

    N. del T Contina con el mismo juego de palabras relativo a byte.

    16

  • 5/29/2018 Matematicas Para Programadores_William Barden

    15/144

    Los registros en el interior de un microprocesador tienen tambin la extensin de uno o dos bytes. Estos, en realidad, no son ms que posicionede memoria de acceso rpido que se utilizan para almacenamiento temporaen el microprocesador. Normalmente hay diez bytes de registros en lomicroprocesadores y hasta 65,535 bytes en la memoria de un microor-denador, como ilustran las figuras 1.9 y 1.10.

    iB

    ;E

    LF A B C

    D E

    H

    L I X

    IYP C

    IR

    POSICION 01

    REGISTROS

    I 1

    i

    c ------- -l

    6 5 , 5 3 46 5 , 5 3 5e

    EN CPU

    I MEMORIA

    ROM Y RAMUN BYTEFigura 1.9. Registros y memoria del Z-8017

  • 5/29/2018 Matematicas Para Programadores_William Barden

    16/144

    REGISTROS

    F]U _5 - - - -

    DP

    CC

    POSICION 01

    MEMORIA

    6 5 , 5 3 46 5 , 5 3 5UN BYTE

    EN CPU

    ROM Y RAM

    Figura 1.10. Registros y memoria del 6809E

    iHay otras agrupaciones por encima o por debajo de los bytes? Anos microordenadores hablan de palabras, que pueden ser dos o ms bypero, generalmente, byte es el trmino ms utilizado para nombrar un grde bits. Algunas veces, las agrupaciones de cuatro bits se denominan nibb(los primeros ingenieros informticos deban estar obsesionados concomida).

    El BASIC, generalmente, opera con ocho o diecisis bits de datos avez -uno o dos bytes-. Un byte se utiliza para las instrucciones PEo POKE del BASIC, que permiten al usuario leer o escribir datos en

    posicin de memoria. Esto es til cuando se usan para cambiar algunoslos parmetros del sistema que, de otra manera, seran inaccesibles de

    el BASIC.Se utilizan dos bytes para representar variables enteras. En este tipo

    formato, una variable del BASIC puede contener valores desde -32,hasta +32,767. Este nmero se almacena como un valor entero con sigcomo veremos en el captulo 3.

    3N. del T.: Nibble, en ingls, significa tambin bocadito.

    18

  • 5/29/2018 Matematicas Para Programadores_William Barden

    17/144

    Si est interesado en el lengua_je ensamblador de su microordenadortendr que operar con bytes para realizar operaciones aritmticas, comosuma y resta, y de uno a cuatro bytes para representar el lenguaje mquinacorrespondiente a la instruccin del microprocesador.

    Ya que nos referiremos continuamente a valores de uno y dos bytesvamos a investigar sobre ellos ms a fondo.

    Paso de binario a decimal

    Big Ed encontr los valores mximos que podan ser almacenados en unoo dos bytes, sumando todas las potencias de dos. Eran 255 para un byte y65,535 para dos bytes. Cualquier nmero entre ellos puede ser representadoempleando los bits apropiados.

    Supongamos que tenemos el valor binario de 16 bits 0000101001011101.

    Para encontrar el nmero decimal de este valor binario, podramos utilizael mtodo de Big Ed de sumar las potencias de dos. Esto se ha hecho en lafigura 1.11, donde obtenemos como resultado 2653. iHay alguna formams sencilla de pasar de binario a decimal? S, hay varias.

    5 4 3 2 29 28 27 26 5 4 23 2 2

    0 0 0 0 1 0 1 0 0 1 0 1 1 1 0 1

    ll X2O = 11x 2' = 4

    l x23 = 8x24 = 16X26= 6 4x2s = 5121 x 2" = 2048

    2653

    Figura 1.11. Paso de binario a decimal

    El primer procedimiento consiste en usar una tabla de valores. Hemos

    incluido una tabla de este tipo en el apndice C, que muestra la relacinentre los sistemas binario, octal, decimal y hexadecimal para valores hasta1023. Como para mostrar valores hasta 65,535 con 16 bits se necesita bas-tante espacio, tiene que existir un procedimiento ms adecuado.

    Un mtodo que funciona sorprendentemente bien es el llamado doblary sumar. Despus de un poco de prctica, resulta muy fcil pasar unos diezbits de binario a decimal. En el siguiente captulo se muestra un mtodo que

    19

  • 5/29/2018 Matematicas Para Programadores_William Barden

    18/144

    sirve para diecisis o ms bits. Doblar y sumar es un procedimiento estrimente mecnico, que automatiza el proceso de conversin. Es ms difdescribirlo que hacerlo. Para utilizarlo, haga lo siguiente:

    1. Tome el primer 1 (ms a la izquierda) del nmero binario.2. Multiplique el 1 por dos y sume el siguiente bit de la derecha, sea 0 3. Multiplique el resultado por dos y sume este resultado al siguiente 4. Repita este proceso hasta que el ltimo dgito haya sido sumado al to

    El resultado es el nmero decimal equivalente al nmero binario.

    Este procedimiento se muestra en la figura 1.12 para la cantidad 26utilizada en el ejemplo anterior. Despus de haber estado operando cnmeros binarios durante algn tiempo, es probable que reconozca 1como el decimal 15 y 111 ll como 31. Puede emplear tambin pequetrucos, como darse cuenta que 11110 es uno menos que 31; o que 101

    l x 2 = 29x = 4

    7 x 2 = 10+ o10x2=20~~ 20

    2 0 x 2 = 40+1=X =

    +o8 2 X 2 = 1 6 4+1

    165165 X 2 = 3 3 0

    ? ?- X 2 = 6 6 2+16 6 3

    6 6 3 X 2 = 1 3 2 6

    X 2 = 2 6 5 2+1

    2 6 5 3

    0 0 0 0 1 0 1 0 0 1 0 1 1 1 0 1

    Figura 1.12. Paso de binario a decimal empleando el mtodo doblar y sumar

    2 0

  • 5/29/2018 Matematicas Para Programadores_William Barden

    19/144

    es tambin 1010 = 10 (en decimal) multiplicado por cuatro para obtener unvalor de 40. Por el momento, sin embargo, haga unos pocos ejemplos paraacostumbrarse al procedimiento; con el tiempo lo har automticamentey probablemente no vale la pena malgastar el tiempo en convertirse enexperto en el sistema binario.

    Paso de decimal a binario

    iCmose hace a la inversa? Es un proceso diferente. Supongamos quetenemos que pasar el nmero decimal 250 a binario. Analizaremos variosmtodos.

    El primer mtodo es el de inspeccin de potencias de dos. Podradenominarse tambin resta sucesiva de potencias de dos, pero tal vez a BigEd no le gustara el nombre. En este mtodo, todo lo que hacemos es tratarde restar una potencia de dos y poner un 1 en la posicin del bit correcta,si se puede (vase Fig. 1.13). Algunas potencias de dos son :256, 128, 64,32, 16, 8, 4, 2, 1, comenzando por las mayores. Es obvio que 256 no se

    podr restar, luego pondremos un 0 en esa posicin. La potencia 128 vale,quedando 122. Ponemos un 1 en la posicin 7. La potencia 64 se resta a122, quedando 58; luego ponemos un 1 en la posicin 6. Este proceso serepite hasta calcular la ltima posicin, como muestra la figura 1.13.

    El mtodo anterior es muy aburrido. Hayuno mejor? Uno ms eficazes el llamado dividir por dos y guardar los restos. En este mtodo sehace lo que indica el nombre; esto se explica en la figura 1.14. La primera

    divisin es 250 entre dos, resultando 125. Resto 0. La siguiente divisin es125 entre dos, dando 62 y quedando 1. El proceso se repite hasta que elresiduo es 0. Ahora, los restos se colocan en orden inverso. El resultado esel nmero binario equivalente al decimal.

    Rellenar a ceros hasta ocho o diecisis bits

    Este es un punto no carente de importancia. Las posiciones de la izquier-da se rellenan con ceros. Esto es una refinada sutileza que se emplea para

    completar con ceros el nmero binario hasta ocho o diecisis bits, segnel tamao con el que se est operando. Tiene, sin embargo, implicacinen los nmeros con signo, luego es mejor empezar a manejarlos en la prc-tica cuanto antes.

    En el captulo siguiente trataremos la notacin de los nmeros octalesy hexadecimales. Mientras tanto, intente hacer algunos ejercicios de autoeva-luacin para practicar el paso entre nmeros decimales y binarios.

    21

  • 5/29/2018 Matematicas Para Programadores_William Barden

    20/144

    250 2 5 60

    250 1 2 8122 1

    122

    58

    58

    26

    26

    10

    10

    2

    2

    2

    0

    0

    0

    , : 2

    1

    1

    81

    40

    21

    I I0

    b 011111010

    Figura 1.13. Paso de decimal a binario por inspeccin

    22

  • 5/29/2018 Matematicas Para Programadores_William Barden

    21/144

    Figura 1.14. Paso de decimal a binario por el mtodo dividir y guardar los restos

    Ejercicios

    25 2

    7

    0 Yi--@ 151 2

    1 1121 0 --RESIDUO FINAL

    1. Hacer una lista de los equivalentes binarios de los nmeros decimales 20 a 32.2. Pasar los siguientes nmeros binari.os a sus equivalentes decimales: 00110101;

    00010000; 01010101; ll 110000; 0011011101101001.

    3. Pasar los siguientes nmeros decimales a su forma binaria: 15, 26, 52, 105,255, 60000.

    4. Rellenar a ceros los siguientes nmeros binarios hasta ocho bits: 101; 110101;010101.

    5. iCul es el mayor nmero decimal que puede ser almacenado en cuatro bits?iY en seis bits? iY en ocho? iY en diecisis? Si n es el nmero de bits,iqu regla general se puede establecer sobre el mayor nmero que se puedealmacenar en n bits? (La respuesta Unos nmeros enormes, no se consideraaceptable.)

    23

  • 5/29/2018 Matematicas Para Programadores_William Barden

    22/144

    2Octal,

    hexadecimal

    y otras basesnumricasLos sistemas hexadecimal y octalson variantes de los nmeros binarios.

    Se utilizan normalmente en sistemas de microordenadores, especialmente elhexadecimal. Los datos pueden especificarse en notacin hexadecimal, tanto

    en BASIC como en lenguaje ensamblador, en muchos microordenadores.Trataremos los sistemas octal y hexadecimal en este captulo junto a otrossistemas numricos interesantes. Hagamos otra visita a Big Ed.

    El chile est bien en Casiopea ,

    No se ve mucha gente como t por aqu, dijo Big Ed, mientras ponaun cuenco del Chile Sorpresa de Big Ed frente a un cliente de piel verde conescamas.

    S que debera decir algo como S, y con estos precios usted ver muchosmenos, pero le dir la verdad. Acabo de llegar de las Naciones Unidas paraechar un vistazo a su industria de semiconductores, dijo el visitante. Esimpresionante.

    Yo mismo he trabajado en ella, dijo Big Ed, mirando a su panel dellamadas. iDe dnde eres, Buddy? No he podido evitar lijarme en tus manosde ocho dedos.

    25

  • 5/29/2018 Matematicas Para Programadores_William Barden

    23/144

    Probablemente nunca has odo hablar de ello; es una estrella pequa... ehm... un lugar. Estas manos, por cierto, son las que me trajeron Valle del Silicio. Vuestros ltimos microprocesadores son para mi genalgo natural. LTe gustara or algo sobre ello?

    Ed asinti.Vers, nosotros somos los Hackers i, y basamos todo en las potenc

    de diecisis. Mir a Big Ed para ver si haba cogido la idea. Cuandnuestra civilizacin se desarrollaba al principio, contbamos con nuestrmanos. Encontrbamos muy fcil contar vuestro valor diecisis utilizansimplemente nuestros dedos. Posteriormente, necesitamos expresar nmermayores. Hace muchos eones, uno de nosotros descubri la notacin posicim Como tenemos diecisis dedos, nuestros numeros utilizan una base diecisis, del mismo modo que los vuestros emplean una de diez. Cadgito representa una potencia de diecisis: 1, 16, 256, 4096, etc.

    iCmo funciona exactamente ?, dijo Big Ed, mirando ansiosamente mantel limpio que haba puesto haca algunos das.He aqu un nmero tpico, dijo el visitante, garabateando repentinmente en el mantel. Nuestro nmero A5Bl representa:

    A x 163 + 5 x 16 + B x 16l + 1 x 16Pero, iqu son las Aes y las Bes?, pregunt Big Ed.Ah, me olvidaba. Cuando contamos con nuestros dedos decimos 1,

    3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F. De hecho, stos son slo quindedos; nuestro ltimo dedo representa el nmero despus de F, nuest

    10, que es vuestro diecisis.iAj Luego A representa nuestro 10, B nuestro ll, etc., dijo Edibujando una tabla como muestra la figura 2.1.

    IExactamente , dijo el visitante. Ahora puedes ver que el nmeA5B1, en nuestra base 16, es igual a vuestro nmero 42,417.A x 163 + 5 x 162 + B x 16i + 1 x 16 =10 x 4096 + 5 x 256 + l l x 16 + 1 x 1 = 42,417

    Bueno, resumiendo, vuestro sistema numrico decimal es realmente e

    pantoso. Estuvimos a punto de no comerciar con vosotros despus de decubrir que utilizabais nmeros decimales. Afortunadamente, sin embargdescubrimos que la base numrica que utilizis con mayor frecuencia vuestros ordenadores era la hexadecimal, que en nuestra base diecisis

    N. del 72 Un hacker en Estados Unidos es un manaco de los ordenadores. Rcurdese que Big Ed se apellida Hackenbyte.

    26

  • 5/29/2018 Matematicas Para Programadores_William Barden

    24/144

    Espera un segundo, exclam Big Ed, utilizamos binarios en nuestrosordenadores.

    Bueno, s, por supuesto, a nivel de hardware, pero utilizis el hexadeci-mal como una especie de abreviatura para representar valores de datos einstrucciones de memoria. Despus de todo, el binario y el hexadecimalson casi idnticos. Continu despus de observar la perplejidad de Big Ed.

    DECIMAL BASE 16

    0 0

    : :3 3

    4 45 56 6

    7 78 89 9

    1 0 A1 1 B

    1 2 C

    1 3 D1 4 E

    1 5 F

    Figura 2.1. Representacin de la base 16

    Mira, supn que tengo el nmero AlF5. Lo representar alzando mismanos (Fig. 2.2). Los ocho dedos de la mano a tu derecha representan losdos dgitos hexadecimales de F5. Los ocho dedos a tu izquierda representanlos dos dgitos hexadecimales de Al. Cada dgito hexadecimal se representacon cuatro dedos, que contienen cuatro bits o el dgito en binario. LEn-tendido ?

    Big Ed se rasc la cabeza. Veamos, 5 en binario es 0101, y se repre-senta por esos cuatro nmeros. El grupo siguiente de cuatro representa laF, que es en realidad 15, o binario 1111. El grupo siguiente... iOh, claro!En lugar de escribir 1010000111110101, slo escribs la notacin abre-viada AlF5.iBig Ed, no slo sirves el mejor chile de este lado de Altair; eres unmatemtico de los pies a la cabeza!, exclam el visitante al tiempo quegesticulaba con su verde y escamosa mano de ocho dedos.

    Big Ed mir la moneda de cobre de diecisis lados dejada como propinay empez a imaginar sobre el mantel...

    27

  • 5/29/2018 Matematicas Para Programadores_William Barden

    25/144

    Figura 2.2. Abreviatura hexadecimal

    Hexadecimal

    El visitante de Ed tena razn. El sistema hexadecimal se usa en micdenadores porque es un mtodo adecuado para acortar largas series de y ceros binarios. Cada grupo de cuatro bits se puede convertir envalor hexadecimal de 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E o F, comuestra la tabla 2.1.

    Pasar de binario a hexadecimal es algo muy simple. Empezandoel bit de la derecha (bit 0), divida el nmero binario en grupos de cuaSi no tiene un m tiplo entero de cuatro (4, 8, 12, etc.), quedan alg

    bits vacos a la izquierda; en este caso, rellene a ceros sin ms. Desconvierta cada grupo de cuatro bits en un dgito hexadecimal. El resules la representacin hexadecimal del valor binario, que es la cuarta partlargo en caracteres. La figura 2.3 muestra un ejemplo. Para pasar de h

    28

  • 5/29/2018 Matematicas Para Programadores_William Barden

    26/144

    Tabla 2.1. Representacin binaria, decimal y hexadecimal

    Binaria Decimal Hex.

    0000 0 0

    0001 1 1

    0010 2 20011 3 3

    0100 4 4

    0101 5 5

    0110 6 6

    0111 7 7

    1000 8 8

    1001 9 9

    1010 10 A

    1011 l l B

    1100 12 C

    1101 1 3 D1110 14 E

    1111 15 F

    (NUMERO1 1 0 1 0 1 1 0 0 0 1 1 0 0 0 1 BINARIO DE 16 BITS)

    uDIVIDIR

    EN GRUPOSDE CUATRO

    PASA CADA GRUPOA UN DIGITOHEXADECIMAL

    D 6 3 1 (HEXADECIMALEQUIVALENTE)

    Figura 2.3. Paso de binario a hexadecimal

    decimal a binario, haga a la inversa. Tome cada dgito hexadecimal y con-virtalo en un grupo de cuatro bits. El ejemplo est en la figura 2.4.

    La notacin hexadecimal se usa para los microprocesadores Z-80,6502, 6809 y muchos otros.

    29

  • 5/29/2018 Matematicas Para Programadores_William Barden

    27/144

    (NUMEROA 7 B 2 HEXADECIMAL)

    uCONVERTIRLO ENGRUPOS DE CUATRODIGITOS BINARIOS

    UNIR GRUPOS

    1 0 1 0 0 1 1 1 1 0 1 1 0 0 1 0 (BINARIOEQUIVALENTE)

    Figura 2.4. Paso de hexadecimal a binario

    Paso de hexadecimal a decimal

    Convertir binario en hexadecimal es fcil. Lo es tambin entre decimy hexadecimal? Se pueden aplicar muchos de los principios y tcnicas ttados en el primer captulo.

    Para pasar de hexadecimal a decimal por el mtodo de las potencde diecisis, tome cada dgito hexadecimal y multiplquelo por la potenadecuada de diecisis, como hizo Big Ed. Para pasar lFlE, por ejempharamos:

    1 x 4096 + 15 x 256 + 1 x 16 + 14 x 1 = 7966El mtodo doblar y sumar puede tambin adaptarse a multiplicar

    diecisis y sumar (de hecho, este esquema sirve para cualquier base numrica). Tome el dgito hexadecimal de la izquierda y multiplique por Smelo al siguiente. Multiplique el resultado por 16. Sume el siguiedgito. Repita el proceso de multiplicacin y sume hasta que el ltimo dgde la derecha sea operado. La figura 2.5 muestra este procedimiento.

    Debera probar este procedimiento y comparar los resultados con de doblar y sumar del sistema binario (no hace falta decirlo: ms v

    que el resultado sea el mismo).

    Paso de decimal a hexadecimal

    El mtodo de la resta sucesiva de potencias de diecisis no es mprctico esta vez, ya que tendra que hacer 15 restas para obtener un gito hexadecimal. El mtodo anlogo dividir por diecisis y guardar

    30

  • 5/29/2018 Matematicas Para Programadores_William Barden

    28/144

    X 16 = 496

    1 F 1 E

    Figura 2.5. Paso de hexadecimal a decimal por el mtodo multiplicar por diecisis y sumar

    restos, sin embargo, es muy prctico, como muestra la figura 2.6. Tome-mos, como ejemplo, el valor decimal 48,555. Dividiendo por diecisis seobtiene un valor de 3034, con un resto de ll (B en hexadecimal). En-tonces, dividiendo 3034 entre 16 da 189, con un resto de 10 (A en hexa-decimal). Dividiendo 189 por 16, resulta ll, con un resto de 13 (D hexade-cimal). Finalmente, dividiendo ll por 16 da 0, con un resto de ll. Los restos,en orden inverso, son el equivalente en hexadecimal BDAB.

    4 8 5 5 5 1 655- - 3034

    (NUMERO HEXADECIMAL

    16 EQUIVALENTE)

    1189 16 B

    02B 11D A

    Figura 2.6. Paso de decimal a hexadecimal

    31

  • 5/29/2018 Matematicas Para Programadores_William Barden

    29/144

    OctalEl sistema hexadecimal es la base ms usada en microordenad

    Sin embargo, el octal o base 8 se emplea tambin. Este ltimo se upreferentemente en los microprocesadores 8080. Como el Z-80 que muchos microordenadores, es una mejora del 8080; muchas instruccide ste sirven para el Z-80. Algunas de estas instrucciones utilizan camde tres bits y su posicin es tal que la representacin octal es adecuad

    Los valores octales emplean potencias de 8, es decir, la posicin para la potencia de cero (8),la posicin 2 es para la primera potenciala posicin 3 es para la segunda potencia (S2), etc. Aqu no se plantproblema de asignar nombres a los nuevos dgitos, como suceda ehexadecimales A a F. Los dgitos octales so.n 0, 1, 2, 3, 4, 5, 6, 7. dgito se puede representar por tres bits.

    Paso entre binario yoctalEl paso de binario a octal es similar a la conversin a hexadeci

    Para pasar de binario a octal, agrupe los bits en grupos de tres, empezpor la derecha. Si opera con nmeros de 8 16 bits, sobrarn alguRellene a ceros. Despus, cambie cada grupo de tres bits por un doctal. Un ejemplo se da en la figura 2.7. Para pasar de octal a binefecte el proceso inverso.

    01010110

    RELLENADO A u0 0 1 0 1 0 1 1 0

    1

    (NUMERO BINARIODE 8 BITS)

    DIVIDIR ENGRUPOS DE TRES

    u CONVERTIR CADAGRUPO EN UNDIGITO OCTAL2 6 OCTALEQUIVALENTE)

    Figura 2.7. Paso de binario a octal

    32

  • 5/29/2018 Matematicas Para Programadores_William Barden

    30/144

    Paso entre octal y decimalEl paso de octal a decimal puede llevarse a cabo por el mtodo de

    las potencias de ocho o por el de multiplicar por ocho y sumar. En elprimer mtodo, multiplique el dgito octal por la potencia de ocho. Parapasar el octal 360, por ejemplo, haramos:

    3~8~+6x8~+0~8=3x64+6x8 +0x1 =192 +48 +0 =240

    Utilizando el mtodo multiplicar por ocho y sumar, tome el dgito octalde la izquierda y multiplquelo por ocho. Sume el resultado al siguientedgito. Multiplique este resultado por ocho y smelo al siguiente. Repita esteproceso hasta que el ltimo dgito de la derecha haya sido sumado. Esteprocedimiento se muestra en la figura 2.8.

    (NUMERO DECIMAL

    EQUIVALENTE)

    (NUMERO

    OCTALFigura 2.8. Paso octal a decimal mediante multiplicacin por ocho y suma

    Para pasar de decimal a octal se adopta de nuevo la tcnica de dividiry guardar los restos: divida el nmero octal por ocho y guarde el resto.Divida el resultado de nuevo y repita hasta que el resto sea menor que ocho.Los restos, en orden inverso, son el nmero octal equivalente. La figura 2.9muestra un ejemplo.

    33

  • 5/29/2018 Matematicas Para Programadores_William Barden

    31/144

    1 6

    (NUMERO OCTALl _ EQUIVALENTE)6hl Q 6 4 0 5

    Figura 2.9. Paso de decimal a octal por el mtodo dividir y guardar los restos

    Trabajando con otras bases numricas

    Aunque las bases ms utilizadas en microordenadores son la octalhexadecimal, se puede operar con cualquier base, ya sea base 3, baso base 126. Un popular paquete de programas de Microsoft, muMatpermite utilizar casi cualquier base para un extenso nmero de dgitoprecisin.

    Dos ejemplos del uso de cualquier base pueden ser interesantes. vieja tcnica para comprimir tres caracteres en dos bytes emplea la basCada uno de los caracteres alfabticos de la A a la Z, los dgitos 0 al 9 y cuatro caracteres especiales (punto, coma, interrogacin y admirao cualesquiera otros), forman un cdigo que corresponde del 0 al 30 encimal. Como el mayor nmero de tres dgitos en base 40 es 39 x 40+ 39 x 4Or + 39 x 40, 63,999, los tres dgitos en base 40 pueden gdarse perfectamente en diecisis bits (dos bytes). Generalmente, los tresracteres deberan contenerse en tres bytes. El resultado de esta compreconsiste en el ahorro de un 50 por 100 del espacio de la memoria

    texto utilizando slo de la A a la Z, del 0 al 9 y cuatro caracteres peciales.Un segundo ejemplo sera el proceso especia1 de tres en raya americ(tic-tactoe). Cada uno de los nueve elementos de un tablero de tres en r

    contiene un cuadrado, un crculo o una cruz. Como hay tres cateres, puede utilizarse ventajosamente una representacin en base 3 pacio = 0, crculo = 1, cruz = 2). El mayor nmero en base 3 para este c

    34

  • 5/29/2018 Matematicas Para Programadores_William Barden

    32/144

    sera 2 x 38+ 2 x 3+ 2 x 36+ 2 x 35+ 2 x 34 + 2 x 33+ 2 x 32+ 2 x 3i ++ 2 x 3, 19,682, que de nuevo puede guardarse perfectamente en diecisis

    bits o dos bytes.Los nmeros en otras bases pueden pasarse a decimal, y viceversa, por el

    mtodo multiplicar por la base y sumar y por el de dividir por la basey guardar los restos, de manera parecida a los nmeros octalesy hexa-decimales.

    Convenios estndar

    En el resto de este libro emplearemos ocasionalmente el sufijo Hpara los nmeros hexadecimales. El nmero 1234H, por ejemplo, significar 1234 hexadecimal y no 1234 decimal. (Tambin ser equivalente&H1234 en algunas versiones del BASIC.) Asimismo, expresaremos las po-tencias de la misma forma que lo hace el BASIC. En lugar de exponentesutilizaremos una flecha hacia arriba ( ? para expresar exponenciales (elevaun nmero a una potencia). El nmero 2 se representar 2 t8, lo5 ser10r 5 y 10m7 (0 /ro) ser 10 t -7.

    En el siguiente captulo trataremos los nmeros con signo. Mientras tantotrabaje sobre los siguientes ejercicios en hexadecimal, octal y bases especiales

    Ejercicios

    1.2.3.

    4.

    5.6.7.

    8.9.

    10.

    iQu representa el nmero hexadecimal 9E2 en potencias de 16?Haga una lista de los equivalentes hexadecimales a los decimales 0 a 20.Pasar los siguientes nmeros binarios a hexadecimal: 0101, 1010, 1010101001001111, 1011011000111010.Pasar los siguientes nmeros hexadecimales a binario: AE3, 999, F232.Pasar los siguientes nmeros hexadecimales a decimales: E3, 52, AAAA.Pasar los siguientes nmeros decimales a hexadecimal: 13, 15, 28, 1000. ~La mxima direccin de memoria en un microordenador de 64K es 64,535.iCuntoes en hexadecimal?Pasar los siguientes nmeros octales a decimales: 111, 333.Pasar los siguientes nmeros decimales a octal :7, 113, 200.Qu puede decir del nmero octal 18? (Limite su respuesta a mil pala-

    bras o menos, por favor.)ll. En un sistema numrico en base 7, jcul sera el equivalente decimal a 636?

    35

  • 5/29/2018 Matematicas Para Programadores_William Barden

    33/144

  • 5/29/2018 Matematicas Para Programadores_William Barden

    34/144

    3Nmeros con

    signo y notacinen complementoa dos

    Hasta ahora hemos hablado de los nmeros binarios sin signo, que slorepresentan valores positivos. En este captulo aprenderemos cmo repre-sentar valores positivos y negativos en microordenadores.

    Big Ed y el bnaco

    iHola, muchacho! iQu quieres?, pregunt Big Ed a un cliente delgadocon un abrigo muy largo de colores y brocado.

    Tomar un chapsuey, dijo el cliente.iQu traes ah?, pregunt Big Ed, cotilleando un artilugio de aspecto

    extrao que pareca un baco, con slo unas pocas cuentas. Parece un

    baco.iNo,es un bnaco!, dijo el cliente. Iba a ser mi camino hacia la famay la fortuna, pero, iay , el que busca a aquellas dos como compaeras en elcamino de la vida slo encontrar desengaos. Te importara escucharme?

    Ed invit con sus manos a que comenzara su historia, sabiendo queno tena eleccin; era una pesada tarde.

    Este aparato es como un baco, pero funciona con nmeros binarios.

    37

  • 5/29/2018 Matematicas Para Programadores_William Barden

    35/144

    Por eso tiene diecisis columnas de ancho y una sola cuenta por cna (Fig. 3.1). Pas aos desarrollndolo y slo recientemente he intcomercializarlo a travs de alguna firma de microordenadores deiTodas lo rechazaron

    Figura 3.1. El bnaco

    iPorqu, hombre ?,dijo Ed, sirvindole el chapsuey.Puede representar cualquier nmero de cero a 65,535, y uno sumar o restar fcilmente nmeros binarios con l. Pero no hay mo

    representar nmeros negativos.Justo cuando pronunci estas palabras, Bob Borrow, el ingenie

    Inlog, entr. No he podido evitar el escuchar tu historia, dijo. Crepuedo ser de alguna ayuda.

    Vers, los ingenieros informticos se enfrentaron con tu problemmuchos aos. Muchas veces, basta simplemente con almacenar un nabsoluto. Por ejemplo, la mayora de los microprocesadores pueden cenar 65,536 direcciones separadas, numeradas de 0 a 65,535. No hay

    para tener nmeros negativos en este caso. Por otro lado, los microodores son capaces de realizar operaciones aritmticas con datos y debcapaces de almacenar valores negativos y positivos.

    Hay diferentes esquemas para representar nmeros negativos, obEd resping cuando Bob se dirigi al mantel.

    Podra sencillamente aadir una cuenta ms, la diecisiete, en el exizquierdo del bnaco. Si la cuenta estuviese arriba, el nmero repressera positivo; si la cuenta estuviese abajo, el nmero sera negativoesquema se denomina representacin signo/magnitud. (Vase la figur

    Es cierto, dijo el forastero. Desde luego, implicara un nue

    seo. Medit, mirando el invento.Espera, todava no he acabado. Tengo un proyecto para que no

    que reformar nada. Se llama notacin en complemento a dos, y te pealmacenar nmeros de -32,768 a +32,767 sin ninguna modificaciniOh, seor! Si usted pudiera hacerlo..., dijo el forastero.

    En este proyecto, haremos que la cuenta decimosexta del linalposicin quince, represente el bit de signo. Si la cuenta est arriba o 0, el

    38

  • 5/29/2018 Matematicas Para Programadores_William Barden

    36/144

    (COLUMNAAADIDA)

    BINACO ACME

    (NEGATIVO)

    0 0 0 0 0 1 0 1 0 0 0 1 1 1 0 0, - 1 3 0 8Figura 3.2. Representacin signo/magnitud

    ser positivo y las cuentas restantes contendrn el valor del nmero. Desde elmomento en que tenemos slo quince cuentas, el nmero representado serdesde 0 (000 0000 0000 0000) a 32,767 (1 ll ll ll ll ll ll 1 l).Yqu sucede con los nmeros negativos?, pregunt el forastero.

    Es lo que iba a decir. Si la cuenta de la posicin 15 est abajo o 1,entonces el nmero representado es negativo. En este caso, mueva todas lascuentas que estn arriba o 0 hacia abajo o 1. Mueva todas las cuentas queestn abajo o 1 hacia arriba o 0. Finalmente, sume 1.

    Gracias por su ayuda, seor, dijo el forastero con ojos de incrdulo,mientras coga el aparato y se diriga a la puerta.iNo, espere, el sistema funciona , exclam Bob. Mire, permtame mos-trarle. Suponga que tiene la configuracin 0101 1110 1111 0001. La cuentadel signo es un 0, luego el nmero representa 101 1110 1111 0001 (enhexadecimal, 5EFl; oen decimal, 24,305). Ahora, suponga que la confgu-racin es 1001 1010 0001 0101. La cuenta del signo es un 1, luego el nmeroes negativo. Ahora invierta la posicin de todas las cuentas y sume una.(Vase la figura 3.3.)

    El resultado es 0110 0101 1110 1011. Ahora pasamos el nmero al de-

    cimal 26,091; adems, el nmero representado es -26,091. Este esquemaes el mismo que usan los microordenadores. iPodr vender fcilmente suidea del bnaco a un fabricante, si le dice que emplea este sistema de nota-cin en complemento adospara los nmeros negativos!

    El forastero pareca dudar. Aver si entiendo esto. Si la cuenta del signoes un uno, iinvierto todas las cuentas y aado uno? Djeme probar unospocos ejemplos. Movi las cuentas del bnaco y calcul sobre el mantel.

    39

  • 5/29/2018 Matematicas Para Programadores_William Barden

    37/144

    c:ENTA DEL-SIGNO = 1CAMBIAR DE POSICION TODASLAS CUENTAS SI LA CUENTADEL SIGNO ES UN UNO

    SE SUMA UNO AQUI(CUENTA MOVIDA HACIA ABAJO)

    0 1 1 0 0 1 0 1 1 1 1 0 1 0 1 1

    9 -126091Figura 3.3. Notacin en complemento a dos

    Ed comenz a desesperar. La tabla de lo que l obtuvo se muestrla fgura 3.4.

    Me parece que los nmeros negativos de 1 a 32,768 podran acenarse por este procedimiento. Pero, iporqu es tan complicado?

    Para que resulte ms fcil en hardware, colega, dijo Bob. Este mimplica que todos los nmeros pueden sumarse o restarse sin necesde comprobar primero el signo de cada operando. Basta con seguir sumo restando los nmeros, y el resultado tendr el signo correcto. Supo

    que tenemos los dos nmeros 0011 0101 0111 0100 y 1011 1111 0000 0Son + 13,684 y 16,640, respectivamente. Los sumamos de la manerguiente:

    0011 0101 0111 0100 + 13,684)1011 1111 0000 0000 ( - 16,640)1111 0100 0111 0100 -2,956)

  • 5/29/2018 Matematicas Para Programadores_William Barden

    38/144

    NUMERO EN COMPLEMENTO REPRESENTACION

    A DOS DECIMAL

    1 1 1 1 1 1 1 32 767

    0 1 0 0 0 0 0 20 640

    0000 0000 0000 0 0 1 0 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

    1111 1111 1111 1111 - 1

    1111 1111 1111 1 1 1 01111 1111 1111 1101 1;bl l l l 0 0 0 0 0 0 0 0 0 0 0 0 - 4 , 0 9 6

    l

    1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 3 2 , 7 6 8

    Figura 3.4. Funcionamiento en complemento a dos para diecisis bits

    El resultado es 1111 0100 0111 0100, 2,956. iComo debera ser!Es increble. Estudiar esto, vender mi bnaco y volver forrado a

    casa.iDnde est tu casa?, pregunt Big Ed.En Brooklyn, dijo el forastero. Adis y gracias; algn da podris

    decir que conocisteis a MichaelODonahue.

    Sumar y restar nmeros binarios

    Antes de ver el esquema del bnaco que representa nmeros con signo(que duplica el sistema utilizado en todos los microordenadores actuales),veamos el tema de la suma y resta de nmeros binarios en general.

    Sumar nmeros binarios es mucho ms fcil que sumar nmeros deci-males. iRecuerda cuando tena que aprender de memoria las tablas de sumar?Cuatro y cinco, nueve; cuatro y seis, diez, etc. En el sistema binario tam-

    bin hay tablas de sumar, pero son mucho ms sencillas: 0 y 0 es 0, 0 y 1es 1, 1 y 0 es 1, y 1 y 1 es 0, y nos llevamos una a la siguiente posicin.Si sta tiene 1 y 1, entonces la tabla tiene una quinta entrada de 1, y 1 y 1da 1, llevndonos 1 a la siguiente posicin. La figura 3.5 resume la tabla.

    41

  • 5/29/2018 Matematicas Para Programadores_William Barden

    39/144

    0+o0

    0+11

    1 ACARREO

    1+1

    o +11 1 0r-/

    ACARREO AIA POSICIONSIGUIENTE

    1tiACARREO ALA POSICION

    SIGUIENTE

    Figura 3.5. Suma de binarios

    Probemos esto con dos nmeros sin signo de ocho bits, los nmerosque hemos estado operando en anteriores captulos. Supongamos quemamos 0011 0101 y 0011 0111 (53 y 55, respectivamente).

    l l 111 (Acarreos)

    0011 0101 (53)0011 0111 (55)0110 1100 (108)

    Los unos encima de los operandos representan los acarreos quvamos a la siguiente posicin. El resultado es 0110 1100, 108, comoperbamos.

    La resta es igual de fcil. 0 menos 0 es 0, 1 menos 0 es 1, 1 menes 0. Y, el ms complicado, 0 menos 1 es 1, con un acarreo negb o rr ow a la siguiente posicin, de la misma forma que nos llevamosen aritmtica decimal. Esta tabla est resumida en la figura 3.6.

    0 1 0- 0 - 0 - 1 - 1

    0 1 0 -1 10

    ACARREO NEGATIVOHACIA LA SIGUIENTE

    POSICION

    Figura 3.6. Resta binaria

    42

  • 5/29/2018 Matematicas Para Programadores_William Barden

    40/144

    Probemos con algunos nmeros. Restemos 0001 0001 de 0011 1010, 17 de 58:

    1 (Acarreo negativo)

    0011 1010 (58)0001 0001 -(17)0010 1001 (41)

    El uno encima del operando representa el acarreo negativo de la si-guiente posicin. El resultado es 0010 1001, 41, como era de esperar.

    Pongamos ahora otro ejemplo. Restemos 0011 1111 de 0010 1010, 63 de 42:

    1111 111 (Acarreos negativos)

    0010 1010 (42)0011 1111 (63)1110 1011 (??)

    El resultado es 1110 1011, 235, un resultado que no nos esperbamos.Pero, espere; ipodra ser?, Les posible? Si aplicamos las reglas de la represen-tacin en complemento a dos y consideramos 1110 1011 como un nmeronegativo, entonces tenemos 00010100 despus de cambiar todos los unos porceros y todos los ceros por unos. Aadimos entonces uno para obtener0001 0101. El resultado es -21, si ponemos el signo negativo, lo cual es

    correcto. iParece como si nos visemos forzados a usar los dichosos com-plemento a dos, queramos o no!

    Representacin en complemento a dos

    Hemos cubierto bastante bien todos los aspectos de la notacin en com-plemento a dos. Si el bit del extremo izquierdo de un valor de 8 16 bitsse considera el bit de signo, entonces ha de ser 0 (positivo) o 1 (negativo).

    La representacin en complemento a dos puede, por consiguiente, obtenerseaplicando las reglas tratadas anteriormente: fijndonos en el bit de signo,cambiando todos los ceros por unos, todos los unos por ceros y aadiendouno.

    Los nmeros se almacenan en forma de complemento a dos, como n-meros de 8 16 bits. El bit de signo ocupa siempre la posicin extrema de laizquierda y es siempre (1) para un nmero negativo.

    43

  • 5/29/2018 Matematicas Para Programadores_William Barden

    41/144

    Los formatos para la representacin en complemento a dos de 8 y 1se muestran en la figura 3.7.

    7 6 5 4 3 2 1 0

    I I I I I I IFORMATO DE 8 BITS

    EN COMPLEMENTO A DOS

    BIT DE SIGNO0 = POSITIVO1 = NEGATIVO

    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

    I FORMATO DE 16 BITS

    EN COMPLEMENTO A DOS

    BIT DE SIGNO0 = POSITIVO1 = NEGATIVO

    Figura 3.7. Formatos de complemento a dos

    Los valores de 8 bits se utilizan para desplazamientos en las inciones del microprocesador para modificar la direccin de un opeguardado en memoria. Los valores de 16 bits se emplean como variableteras en programas de BASIC. Por supuesto, cualquiera de ellos ser utilizado por el programador de BASIC o lenguaje ensamblador representar lo que desee.

    Extensin del signo

    Es posible sumar o restar nmeros en complemento a dos, uno de 8 yde 16 bits. Cuando se realizan estas operaciones, el signo del menormero debe extenderse hacia la izquierda hasta que ambos tengan la mlongitud; es decir, todas las posiciones necesarias para que el menor ntenga el mismo tamao que el mayor se rellenan con el bit de signesto no se hace, el resultado ser incorrecto. Tomemos, por ejemp

    44

  • 5/29/2018 Matematicas Para Programadores_William Barden

    42/144

    suma del valor de 8 bits 1111 1111 -l), y el valor de 16 bits 0011 11111111 1111 + 16,383). Si no se extiende el signo, tenemos:

    0011 1111 1111 1111 + 16,383)1111 1111 ( -1)

    0100 0000 1111 1110 (+ 16,638)

    El resultado aqu es + 16,638; obviamente incorrecto. Si se extiende elsigno correctamente a todas las posiciones de la izquierda, sin embargo,tenemos:

    0011 1111 1111 1111 ( + 1 6 , 3 8 3 )1111 1111 1111 1111 ( -1)0011 1111 1111 1110 + 16,382)

    que es el resultado correcto.

    Suma y resta en complemento a dos

    Todos los microprocesadores usados en microordenadores tienen unainstruccin para sumar y otra para restar dos nmeros con signo de 8 bitsAdems, algunos microprocesadores permiten la suma y la resta de dos n-meros con signo de 16 bits.

    Los dos operandos que aparecen en la suma o en la resta pueden tener

    cualquier configuracin: dos nmeros positivos, uno positivo y otro negati-vo, o dos nmeros negativos. Al restar, hay que considerar la operacin dela siguiente manera: al nmero que se resta (sustraendo) se le invierte esigno haciendo su complemento a dos: cambiando todos los unos por cerostodos los ceros por unos, y aadiendo uno. Una vez hecho esto, la restaequivale a una suma del mismo nmero con el signo invertido. Pongamosun ejemplo. Supongamos que 1111 1110 (-2) se va a restar de 0111 0000+ 112). Primero se invierte el signo al sustraendo de 2. El complementoa dos de 1111 1110 es 0000 0010 (+ 2). Entonces, se hace la suma.

    0111 0000 ($112)0000 0010 (+2)0111 0010 (+114)

    Hay que tener claro que el microprocesador no realiza esta operacinde inversin antes de la resta. Esto es, simplemente, un medio adecuado para

    45

  • 5/29/2018 Matematicas Para Programadores_William Barden

    43/144

    ver lo que sucede en la resta, y tiene alguna relacin con las operaciode que hablaremos en el captulo siguiente.

    Antes de tratar algunas particularidades de la suma y la resta, coerrores de desbordamiento y acarreos, y los indicadores de los microprosadores ordinarios, intente hacer alguno de los siguientes ejercicios adiestrarse en la suma y la resta en complemento a dos.

    Ejercicios

    1. Sume los siguientes nmeros sin signo, dando los resultados en binaridecimal.

    01 0111 010101

    l l 1111 101010

    2. Reste los siguientes nmeros sin signo, dando los resultados en binaridecimal.

    10 0111 1100

    01 0101 0001

    3. Halle los complemento a dos de los siguientes nmeros con signo, cuandonecesario, para obtener los nmeros decimales representados por:

    01101111, 10101010, 10000000

    4. iCul es la forma en complemento a dos de 8 bits de 1, -2, 3, +5,y +127?5. Extienda el signo de los siguientes nmeros de 8 a 16 bits. Escriba los nm

    representados antes y despus.

    01111111, 10000000, 10101010

    6. Sume- 5 a - 300.(iNo,no, en binario !)7. Reste - 5 de 300 en binario.

    46

  • 5/29/2018 Matematicas Para Programadores_William Barden

    44/144

    Acarreos,errores de

    desbordamientoe indicadoresEn este captulo ampliaremos algunos de los conceptos introducidos en

    el anterior. Algunos de stos son sutiles y otros no tanto, y todos ellos serefieren a nmeros con signo. Analizaremos aqu algunos de ellos.

    Este restaurante tiene una capacidadde 127 personas.i Evitando errores de desbordamiento!

    Big Ed estaba sentado frente a una taza del famoso Java de Big Eddespus de haberse marchado la multitud de ingenieros; en ese momento,se abri la puerta del restaurante y entr un hombre uniformado.

    Dgame, seor, ienqu puedo servirle?Pngame una taza de caf y un suizo, respondi el cliente.Veo que va de uniforme. iPertenece usted a las Fuerzas Areas de

    Campo Moffett?, pregunt Ed.Na, soy transportista. Vine a esta zona en respuesta a un anuncio

    que solicitaba especialistas en acarreos y errores de desbordamiento enInlog y, aunque no s lo que es un error de desbordamiento, puedo

    49

  • 5/29/2018 Matematicas Para Programadores_William Barden

    45/144

    acarrear lo que sea; as que pens que daba el tipo, pero el jefe de persose rio y me seal la puerta.

    Creo que entiendo el problema, seor, dijo un cliente de constitudelgada que no aparentaba ms de catorce aos. Una tarjeta de referedel Z-80 sobresala del bolsillo de su camisa. Soy un programador

    mucha experiencia en errores de desbordamiento.No saba que trabajabais en transportes.Bueno, nosotros manejamos el traslado de datos de los procesad

    pero trabajamos bastante con el error de desbordamiento. Le imporle explico? El transportista arque las cejas y esper.

    . . . despus de varias tazas de caf de Ed, el programador haba habdel sistema binario y de las operaciones aritmticas simples.

    Como puede ver, se puede almacenar cualquier valor de 128 a +en 8 bits, o cualquier valor de 32,768 a + 32,767 en 16 bits. LEntendid

    El transportista dijo : S, salvo los nmeros sin signo, en cuyo cas

    extiende de 0 a 255 o de 0 a 65,535 2 t(N l), donde N es el tamdel registro en bits.Vaya, usted aprende rpido, dijo el programador. Ahora, continu

    do... Si realizamos una suma o resta cuyo resultado sea mayor de +32o menor de 32,768 (o mayor de + 127 o menor de 128),iqu ocur

    Bueno, supongo que se obtiene un resultado incorrecto, dijo el traportista

    Es cierto, se obtiene un resultado incorrecto. El resultado es demasigrande en sentido positivo o negativo para poder ser almacenado en 16 bits. En este caso, se produce un error de desbordamiento porqu

    resultado excede del valor que puede contenerse en 8 16 bits. Sin embahemos diseado un indicador de error de desbordamiento como partemicroprocesador. Este indicador puede examinarse por un programadorlenguaje ensamblador para ver si se ha producido un error de desdamiento despus de una suma o de una resta. Y resulta que, cuando plo mismo en operaciones sin signo, se produce un error de acarque es lo que tambin pedan en el anuncio. No slo tenemos un indicade error de desbordamiento, sino un indicador de acarreo, otro de sigotro de cero...

    Espera un segundo. iQuieres decir que esa gente de personal quun ingeniero informtico especializado en aritmtica de microprocesares?, dijo el transportista con una mueca. iCreo que me han tomadpelo! iMe doctor en Fsica!iTiene usted un doctorado en Fsica ?,escupi Big Ed, esparciendmayor parte de un trago de Big Eds Java sobre el suelo del restaurante

    S, hago mudanzas y portes slo para ganarme la vida, dijo el traportista al salir por la puerta, moviendo la cabeza con pesadumbre.

  • 5/29/2018 Matematicas Para Programadores_William Barden

    46/144

    Errores de desbordamiento

    Como vimos en el ejemplo anterior, el error de desbordamiento es po-sible cada vez que se hace una suma o resta y el resultado es demasiadogrande para almacenarse en el nmero de bits reservado para el resultado.En la mayora de los microordenadores, esto significara que el resultado

    es mayor que el que puede almacenarse en 8 16 bits.Supongamos que operamos con un registro de 8 bits en el micropro-cesador. Una tpica instruccin de suma sumara los contenidos de un re-gistro de 8 bits, llamado acumulador, a los contenidos de otro registro o

    posicin de memoria. Ambos operandos estaran en complemento a dos consigno. Enqu condiciones se producira el error de desbordamiento? Cual-quier resultado mayor de + 127 o menos de 128 dara lugar a error dedesbordamiento. Ejemplos:

    1111 0000 (-16) 0111 1111 + 127)+ 1000 1100 (-116) 0100 0000 (+64)0111 1100 + 124 ino ) 1011 1111 (-80 ino )

    Observe que, en ambos casos, el resultado era obviamente incorrectoy el signo era el contrario al verdadero. El error de desbordamiento slopuede ocurrir cuando la operacin consiste en sumar dos nmeros positivos,dos nmeros negativos, restar un nmero negativo de otro positivo o unopositivo de otro negativo.

    El resultado de la suma o resta, en la mayora de los microprocesa-dores, sube (1) o baja (0) un indicador. Este indicador puede utilizarse en

    un salt o condicional: un salto si huy error de desbordamiento o un saltosi no lo huy. La comprobacin se hace a nivel de lenguaje mquina y noen BASIC.

    AcarreoOtra condicin importante es la de acarreo. Hemos visto cmo se usan

    los acarreos en sumas de nmeros binarios, y cmo los acarreos negat i vosse emplean en restas. El acarreo que se produce por una suma es aquel quese produce a continuacin del dgito ms significativo del resultado. Unejemplo: supongamos que sumamos los dos nmeros siguientes:

    1 1111 111 (Acarreos)

    0111 1111 (+127)1111 1111 ( -1)0111 1110 + 126)

    51

  • 5/29/2018 Matematicas Para Programadores_William Barden

    47/144

    Los unos encima de los operandos representan los acarreos a guiente posicin. El acarreo de ms a la izquierda, sin embargo,fuera de las posiciones ocupadas por los bits. De hecho, al no coincon estas posiciones, pone el indicador del acarreo a 1 en el micropsador de que se trate. iEs til este acarreo? No mucho, en este ejemHabr un acarreo siempre que el resultado no sea negativo. Cuando

    sultado cambia de 0000 0000 a 1111 1111, no se produce ningn acaComo este indicador puede comprobarse con un salto condicional, sacarreo o un salto condicional, si no hay acarreo a nivel de lenmquina, el estado del acarreo es til a veces. Tambin se utiliza para

    plazamientos, que veremos ms adelante.

    Otros indicadores

    Los resultados de operaciones aritmticas como suma y resta estabgeneralmente otros dos indicadores en el microprocesador. Uno es el indor cero. Se pone a (1) cuando el resultado es cero, y se pone a (0) cel resultado no es cero. Se pondra a (1) para una suma de + 23 y se pondra a (0) para una suma de 23 y + 22. Puesto que constantecomparamos valores en programas en lenguaje mquina, el indicadorse maneja mucho en la prctica.

    El indicador signo tambin se utiliza generalmente. Este se pono a 0 de acuerdo con el resultado de la operacin; refleja el valor den la posicin ms significativa.

    El indicador de cero y el de signo pueden comprobarse en programlenguaje mquina por medio de saltos condicionales como salto si es salto si no es cero, salto si es positivo y salto si es negativo. Nque una condicin de positivo incluye el caso de que el resultado seaEl cero es un nmero positivo en la notacin en complemento a dos.

    Indicadores en los microordenadores

    Los indicadores en el microprocesador Z-80 son representativos

    de todos los microprocesadores. Se muestran en la figura 4.1. Los indres del microprocesador 6809 son un segundo ejemplo de indicade un microprocesador cualquiera, como muestra la figura 4.2.

    En la seccin siguiente analizaremos de forma detallada las operaclgicas y de desplazamiento, que tambin afectan a los indicadores. de empezar dicho captulo, no obstante, he aqu algunos ejercicios error de desbordamiento, acarreos e indicadores.

    52

  • 5/29/2018 Matematicas Para Programadores_William Barden

    48/144

    7 6 5 4 3 2 1 0

    REGISTRO

    FoF JS/ZI-IHl-IYIN/4

    INDICADOR DE ACARREO

    INDICADOR DE SUMA-RESTA

    INDICADOR DE PARIDAD 0ERROR DE DESBORDAMIENTO

    INDICADOR DE MEDIO ACARREO

    INDICADOR DE CERO

    INDICADOR DE SIGNO

    REGISTRO DELCODIGO DE

    Figura 4.1. Indicadores del microprocesador Z-80

    7 6 5 4 3 2 1 0

    LA CONDICION

    E F H I N Z V C

    INDICADOR DE ACARREO

    l t1 MASCARA DE PETICIONINDICADOR DE ERROR DEDESBORDAMIENTOINDICADOR DE CEROINDICADOR NEGATIVO/L

    ;;;;;if;; cloNDE INTERRUPCION RAPIDAESTADO ENTERO ENLA PILA

    Figura 4.2. Indicadores del microprocesador 6809

    53

  • 5/29/2018 Matematicas Para Programadores_William Barden

    49/144

    Ejercicios

    1. iCules de las siguientes operaciones darn error de desbordamiento? su valor.

    01111111 01111111 10101111

    + 00000001 0000000 1 + 11111111

    2. iCules de las siguientes operacionesque ponga a (1) este indicador?

    01111111

    + 00000001

    produce un acarreo fuera del l

    11111111

    + 00000001

    3. Supongamos que tenemos un indicador Z (cero) y otro S (signo) en el m

    procesador. iCules sern los estados (0,l) de los indicadores Z y S dede las operaciones siguientes?01111111 11011111

    + 10000001 10101010

    54

  • 5/29/2018 Matematicas Para Programadores_William Barden

    50/144

    5Operaciones

    lgicas

    y desplazamientosLas operaciones lgicas en microordenadores se utilizan para manipular

    datos en base a un bit o un campo. Los desplazamientos tambin son tilespara procesar bits en nmeros binarios o para implementar multiplicaciones

    y divisiones simples.

    El enigma britnico

    Las cosas iban tranquilas en el restaurante de Big Ed en el Valle del Si-licio. Este se dispona a ojear el peridico local, cuando oy un frenazo; unimponente autobs rojo de dos pisos se detena frente al restaurante. Las

    puertas del autobs se abrieron y una docena o ms de personas se precipi-taron al exterior. Todas ellas aparecan vestidas con tweed, sombreros hongos

    y otras prendas tpicamente britnicas. Uno incluso llevaba un paraguasnegro, y no paraba de mirar ansiosamente al cielo.

    iHola iPuedo servirles en algo?Ms bien. iPuede usted acomodar a un grupo de diecisiete ingenieros

    informticos y cientficos britnicos?Creo que s, dijo Big Ed. Si no les importa juntar dos mesas, po-

    demos poner a ocho de ustedes en la mesa A y a otros ocho en la B.

    57

  • 5/29/2018 Matematicas Para Programadores_William Barden

    51/144

    Uno de ustedes tendr que sentarse en una silla, cerca de la mesa A.silla de mi hija Carrie, pero creo que servir. Esto acumular..., ejacomodar a todosl.

    Muy bien, dijo el portavoz; y el grupo llen las dos mesas y lextra (Fig. 5.1).

    qFigura 5.1. Disposicin de los asientos

    Caramba, nunca pens que hubiera tantos especialistas en informen Gran Bretaa, dijo Ed.

    Tantos como yanquis, dijo el portavoz. iHa odo usted habTuring, el Proyecto Coloso para descifrar Enigmas, o los Tubos de Willi

    Big Ed neg con la cabeza. Lo siento, no tengo ni idea.Est bien, yanqui. Vamos a ver: comamos primero, y luego asis

    a una conferencia especia1 sobre microprocesadores y sus aplicaciocricket. Caballeros, ipuedenprestarme atencin, por favor?

    Como ustedes saben, el Ministerio nos ha concedido fondos limpara este viaje. Por tanto, tenemos que poner ciertas restricciones muerzo de hoy. He echado un vistazo al men y he llegado a las siguconclusiones:

    Uno. Pueden ustedes tomar caf (puaj) 0 t, pero NO ambosDos. Pueden tomar sopa 0 ensalada 0 ambos.Tres. Pueden tomar un sandwich 0 un plato combinado 0 una Sorpr

    Big Ed.Cuatro. Si toman postre Y copa, deben pagar el suplemento a

    nal. iAlguna pregunta?N . del T.: La nota de humor se desprende, en esta ocasin, del hecho de que C

    carry (acumular, acarreo) se pronuncian en ingls de manera idntica.

    58

  • 5/29/2018 Matematicas Para Programadores_William Barden

    52/144

    Uno de los cientficos de edad ms avanzada habl. Vamos a ver. Sihe entendido bien, tenemos una 0 exclusiva del caf y del t; una 0 inclusivade la sopa y la ensalada; una 0 inclusiva del plato fuerte, y una Y del postrey de la copa con suplemento adicional. Correcto?

    Correcto, Geoffrey. iBien, compaeros; al ataque!Este aire acondicionado me est dejando el cuello helado, dijo uno de

    los jvenes ingenieros.Lo que tenemos que hacer entonces es rotar alrededor de la mesa A,

    pasando por la silla extra, de modo que cada cual reciba por turno el airefro, dijo el portavoz. Cada vez que diga: ia rotar!, cambiaremos desilla una posicin.

    LES realmente necesario pasar por mi silla?, pregunt el ingenierosentado en la silla extra.

    Bueno, podemos elegir entre rotar pasando por la silla o sin pasar,pero creo que es ms justo hacerlo como he dicho.

    A intervalos espaciados regularmente, a lo largo de la comida, el por-tavoz gritara: irotad , y el grupo de la mesa A y la silla extra se moveracomo muestra la figura 5.2. Finalmente, todo el grupo de la mesa A selevant, pag su cuenta y se fue.

    \I Ht-LM_f-LH H N7/ SILLA DECARRIEFigura 5.2. El grupo rota

    Creo que hemos acabado aqu, seor, dijo el grupo de la mesa B.Muy bien; entonces, desplazaos por orden hacia la izquierda por la

    silla vaca, para que pueda ver vuestra cuenta, dijo el portavoz.El cientfico ms prximo a la caja se levant y ocup la silla vaca.

    El portavoz examin la cuenta. iE siguiente!, exclam. La persona de la sillaextra fue hacia la caja, y la persona a continuacin ocup su lugar en la sillaextra. Este proceso continu hasta que la mesa B se vaci (vase la figura 5.3).

    Excelente comida, dijo el portavoz a Big Ed al marcharse.Encantado de tenerles por aqu, dijo Ed. Espero que su seminario

    de cricket tenga xito.Eso no nos preocupa demasiado; lo que nos preocupa son las araas,

    59

  • 5/29/2018 Matematicas Para Programadores_William Barden

    53/144

    B

    A

    HHHIIHklHH

    Iclclclclnclclo SILLA DE CAJACARRIE REGISTRAD

    Figura 5.3. El grupo se desplaza

    dijo el portavoz, abriendo el paraguas y saliendo por la puerta al so

    cielo de San Jos. iHasta la vista!Operaciones lgicas*

    Todos los microordenadores son capaces de realizar las operalgicas de Y, 0 y 0 exclusiva a nivel de lenguaje mquina. Ademmayora de las versiones del BASIC permiten realizar la Y la 0.

    Todas las operaciones lgicas trabajan bit a bit. No hay acarreos aposiciones. A nivel de lenguaje mquina, las operaciones lgicas se ej

    en un byte de datos; el BASIC permite que las operaciones lgicas tlugar con operandos de dos bytes. Siempre hay dos operandos y usultado.

    Operacin 0

    La operacin 0 se muestra en la figura 5.4. Su tabla de verdatablece que habr un 1 en el resultado si uno de los operandos, o amtienen un 1.

    La operacin 0 se utiliza, a nivel de lenguaje mquina, para po1 un bit. Una aplicacin tpica debera emplear los ocho bits de una cin de memoria como ocho indicadores para diversas condiciones, muestra la figura 5.5. La 0 no es tan ampliamente utilizada en BASIC

    * N. del T.: Hemos decidido traducir las operaciones lgicas DND, OR, XOR ypor Y, 0, O,, y NO, respectivamente, para lograr una ms fcil comprensin del

    60

  • 5/29/2018 Matematicas Para Programadores_William Barden

    54/144

    00 00

    0 1 1

    0 1 0 0 0

    1 1 1 RESULTADO

    001101110 01011011 8 - B I T 0

    01111111

    Figura 5.4. Operacin 0

    INDICADORES EN UNA POSICION DE MEMORIA

    CUALQUIER BIT PUEDE PONERSEA UNO POR UNA OPERACION 0

    0= NORMAL l1 = PELO

    ALBOROTADO

    0= NORMAL1 = INGENIERO

    CHIFLADO

    L 0 = MASCULINO 1 = FEMENINO0 = ALTO 1 = BAJO0 = PELO CASTAO1 = PELO NEGRO2 = PELO RUBIO3 = PELIRROJO4 = PELO BLANCO5 = PELO GRIS6 = PELO NARANJA

    7 = CALVO0= NORMAL (HIJA)1 =SEPTIMO HIJO (HIJA) DE

    UN SEPTIMO HIJO (HIJA)

    0 0 1 0 0 1 0 0

    0 1 1 0 0 0 0 0 0

    I

    SEPTIMO HIJO DE UN SEPTIMOHIJO, PELO NEGRO, ALTO,MASCULINO

    4

    1 1 1 0 0 1 0 0

    Figura 5.5. Usando la operacin 0

    PELO ALBOROTADO, INGENIEROCHIFLADO, SEPTIMO HIJO DE UNSEPTIMO HIJO, PELO NEGRO,ALTO, MASCULINO

    61

  • 5/29/2018 Matematicas Para Programadores_William Barden

    55/144

    su uso se requiere ocasionalmente cuando, por ejemplo, se ponen lode un byte de una memoria de video para mostrar minsculas, comotra la figura 5.6.

    0

    ESTE BIT ESUN UNO SI LAS LETRAS

    SON MINUSCULAS

    Figura 5.6. Ejemplo de 0

    Operacin Y

    La operacin Y se describe grficamente en la figura 5.7. Tambin nicamente a nivel de bit, sin acarreos a otras posiciones. El resultado es un 1 si ambos operandos son 1; si alguno tiene 0, el resultado es 0.

    0 0 1

    Y 0 Y 1 Y 0 Y 0 0 0 1

    00110111

    Y 01011011

    00010011

    8 BITS Y

    Figura 5.7. Operacin Y

    La Y se utiliza primordialmente en lenguaje mquina, para poneun bit o quitar ciertas partes de una palabra de 8 bits, como muesfigura 5.8. En BASIC, la operacin Y tiene aplicaciones ms limiLa figura 5.9 nos ofrece un ejemplo; comprueba los mltiplos de 32 econtador de 32 lneas por pgina.

    62

  • 5/29/2018 Matematicas Para Programadores_William Barden

    56/144

    0 0 1 ~ 0 0 1 0 0

    Y 0 0 0 0 0 0 0 1

    I0 0 0 0 0 0 0 0

    Figura 5.8.

    0 0 1011 10 1

    0 0 0 1 1 1 1 1

    I0 0 0 0 1 1 0 1

    SEPTIMO HIJO DE UNSEPTIMO HIJO, PELO NEGRO,ALTO, MASCULINO

    (MASCARA PARA COMPROBAR EL SEXO)

    0 = MASCULINO1 =SI ES FEMENINOEjemplo de Y

    LINEA DE CUENTA=45

    MASCARA DE LA LINEA 32

    =0, SI ES LA LINEA 32O, SI NO ES IA LINEA 32

    Operacin 0

    Figura 5.9. Otro ejemplo de operacin Y

    exclusiva

    La figura 5.10 muestra esta operacin. Sus reglas establecen que elresultado es un 1, si uno u otro bit, pero no ambos, son unos. En otraspalabras, si ambos bits son unos, el resultado es 0.

    0

    x 00

    0 1

    0 ex 1 Oex 0 Oex 1 1 0 RESULTADO

    0 1 0 1 1 0 1 1 B I T

    0 0 1 1 0 1 1 1 18 0 EXCLUSIVA

    01101100

    Figura 5.10. Operacin 0 exclusiva

    no se utiliza con frecuencia en lenguaje mquina y enLa 0 exclusivaBASIC. La figura 5.11 muestra un ejemplo donde el bit menos significativo

    63

  • 5/29/2018 Matematicas Para Programadores_William Barden

    57/144

    se utiliza como un conmutador (toggle), para indicar el nmero de das: par o impar.

    0 0 0 0 0 0 0 1 PASADA PREVIA= IMPAR

    I0 ex 0 0 0 0 0 0 0 1

    00000000 PASADA SIGUIENTE

    0 ex 0 0 0 0 0 0 0 1

    0 0 0 0 0 0 0 1 PASADA SIGUIENTE

    Figura 5.11. Ejemplo de 0 exclusiva

    Otras operaciones lgicas

    Hay otras operaciones lgicas que se realizan en BASIC y en lenmquina. Una de stas es la operacin NO. Es similar a la operaciinvertir el signo tratada en el captulo 4, salvo que sta da lugar al

    plemento auno. El complemento a uno de un nmero se obtiene camdo todos los unos por ceros y todos los ceros por unos, sin aadir uniQu efecto produce ? Analicemos un ejemplo de un nmero con sign

    Si realizamos la operacin NO sobre el nmero 0101 0101, obten1010 1010. El valor original era +85; el resultado es un nmero negque, una vez transformado por las reglas del complemento a dos, se

    vierte en 0101 0101 + 1 = 0101 0110 = 86. Se podra decir, por que la operacin NO suma uno al nmero y entonces invierte el sLa versin en lenguaje mquina de la operacin NO se denohabitualmente CPL -para complemento a uno.

    La operacin NOT de BASIC puede emplearse para comprobar cciones lgicas en un programa, como muestra la figura 5.12. El lenmquina CPL no se utiliza con frecuencia.

  • 5/29/2018 Matematicas Para Programadores_William Barden

    58/144

    1 0 1 0 IF NOT (IMPRESORA) THENPRINT NO IMPRESORA-COMPRE UNA-ESPERARE

    ELSE LPRINT RESULTADO=;AFigura 5.12. Operacin NO

    Operaciones de desplazamiento

    La reunin de los britnicos en el restaurante mostraba dos tipos dedesplazamiento comnmente utilizados en microordenadores: rotaciones ydesplazamientos lgicos. Son susceptibles de realizarse en lenguaje mquina,

    pero no en BASIC, y generalmente operan en ocho bits de datos. Estnrelacionados con el indicador de acarreo tratado en el ltimo captulo.

    Rotaciones

    La figura 5.2 mostraba una rotacin con la mesa A en el restaurante.Observemos ahora la figura 5.13, donde los datos se rotan a derecha oizquierda, una posicin cada vez. Aunque los ordenadores ms complejospermitirn cualquier nmero de desplazamientos con una instruccin, los mssimples slo permiten un desplazamiento por cada instruccin.

    Como los datos rotan fuera de los lmites del registro del microproce-sador o posicin de memoria, o bien vuelve al lmite opuesto del registro

    o posicin de memoria, o bien va al indicador de acarreo. Si los datos pasana travs del acarreo, se trata en realidad de una rotacin de 9 bits. Si losdatos pasan por alto el acarreo, se tratar de una rotacin de 8 bits.

    En cualquier cuso, el bit desplazado siempre va al acarreo, como muestra la

    figura 5.13.El indicador de acarreo puede comprobarse por una instruccin de salto

    condicional a nivel de lenguaje mquina para comprobar efectivamente si elbit desplazado era un cero o un uno. La rotacin se utiliza para comprobarun bit de una vez para operaciones como multiplicacin (vase captulosiguiente) o el alineamiento de datos en una operacin Y.

    Desplazamientos lgicos

    El segundo tipo de desplazamiento reflejado en la ancdota del restau-rante era el lgico. Este no es una rotacin. Los datos caen fuera dellmite, de la misma forma que los cientficos se fueron del restaurante.

    65

  • 5/29/2018 Matematicas Para Programadores_William Barden

    59/144

    ROTACION HACIA LA DERECHA

    ACARREO

    ANTES

    ACARREO

    1 1 0 1 0 1 1 0c l

    1 DESPUES

    ROTACION HACIA LA IZQUIERDA A TRAVES DEL ACARREO A N T E SACARREO

    cl 1 0 1 1 1 1 0 1Figura 5.13. Dos rotaciones

    DESPUES

    Cuando cada bit es desplazado, sin embargo, va al acarreo de forma

    ste siempre almacena el resultado del desplazamiento. El lmite opuestoregistro o posicin de memoria se rellena con ceros a medida que se plaza cada bit. Aqu, de nuevo, se desplaza una posicin cada vezoperacin de desplazamiento lgico se muestra en la figura 5.14.

    En realidad no podemos hablar mucho sobre la rotacin, relaciocon lo que sucede aritmticamente con el contenido. Esto se debe a qudatos vuelven a entrar en el registro y, en sentido aritmtico, los resultno se pueden predecir.

    En el caso del desplazamiento lgico hacia la derecha o hacia la izquisin embargo, los resultados son plenamente previsibles. Observemos alg

    ejemplos. Supongamos que tenemos el valor 0111 1111, con el acarreoteniendo un valor cualquiera. Mostraremos el registro y el acarreo con nbits con el acarreo a la derecha; es decir, 0111 1111 x. Despus deoperacin lgica de desplazamiento a la derecha tenemos 0011 1 ll 1 valor original era + 127; una vez producido el desplazamiento, el valo+63ms el acarreo. iParece como si un desplazamiento lgico a la derdividiera por dos y pusiera el resto de 0 1 en el acarreo! Esto es ci

    66

  • 5/29/2018 Matematicas Para Programadores_William Barden

    60/144

    y la operacin lgica de desplazamiento a la derecha puede utilizarse cadavez que se quiera dividir por 2, 4, 8, 16 u otra potencia de dos.Qu sucede con el desplazamiento a la izquierda? iEfectivamente Unaoperacin lgica de desplazamiento a la izquierda multiplica por dos. Porejemplo, tomemos x 0001 ll 11, donde x es el estado del indicador del acarreo.Despus del desplazamiento lgico a la izquierda, el resultado es 0 0011 ll 10.

    El nmero original era + 31, y el resultado es +62 con el acarreo puestoa 0 por el bit ms significativo. El desplazamiento lgico a la izquierdase puede realizar cada vez que un nmero ha de multiplicarse por 2, 4,8 o cualquier otra potencia de dos.

    DESPLAZAMIENTO LOGICO HACIA LA DERECHA

    ACARREO

    0 - 1 1 0 1 1 0 1 1J - c l

    X ANTES

    0 1 1 0 1 1 0 1 DESPUES

    DESPLAZAMIENTO LOGICO HACIA LA IZQUIERDA

    ACARREO

    ANTES

    DESPUESFigura 5.14. Dos desplazamientos lgicos

    Desplazamientos aritmticos

    Cuando se realiza un desplazamiento lgico con nmeros con signo,surge un problema. Consideremos el caso del nmero 1100 ll ll ;es unvalor de -49. Cuando el nmero se desplaza hacia la derecha, el resultadoes 0110 0111, representando el valor + 103. Obviamente, el desplazamientono dividi el nmero 49 por 2 para obtener un resultado de 24.

    Para resolver el problema de desplazar datos aritmticos, se suele incluirun desplazamiento aritmtico en los ordenadores.

    El desplazamiento aritmtico conserva el signo segn se desplaza a la de-recha, de forma que el desplazamiento es (casi) aritmticamente correcto.

    67

  • 5/29/2018 Matematicas Para Programadores_William Barden

    61/144

    Si se realizase un desplazamiento aritmtico en el ejemplo anterior, el rtado sera el que muestra la figura 5.15.

    BIT DE SIGNO = 1 = NEGATIVO

    A CA RREO1 1 0 0 1 1 1 1 X A NTES

    t -491A CA RREO

    1pp 1ojop Il/ b -l DESPUES-25

    Figura 5.15. Desplazamiento aritmtico a la derecha

    iQu sucede con los desplazamientos a la izquierda? En algunocroordenadores, el desplazamiento aritmtico a la izquierda mantiene de signo y desplaza el siguiente bit ms significativo al acarreo, como mtra la figura 5.16. En otros microordenadores no hay autnticos dezamientos a la izquierda.

    BIT DEL SIGNO NO AFECTADO

    A CA RREO I

    A CA RREO

    cl lllllllll1 1 0 0 1 1 1 1 0t-98

    A NTES

    DESPUES

    Figura 5.16. Desplazamiento aritmtico a la derecha

    En el prximo captulo veremos cmo el desplazamiento puede utilipara llevar a cabo muchos tipos diferentes de algoritmos de multiplicay divisin. Mientras tanto, intente contestar a las siguientes preguntas.

  • 5/29/2018 Matematicas Para Programadores_William Barden

    62/144

    Ejercicios

    1. Efecte la operacin 0 en los siguientes conjuntos de operandos binariosde 8 bits.

    10101010 10110111

    0 00001111 0 01100000

    2. Realice la operacin 0 exclusiva en los siguientes operandos binarios de 8 bits.

    10101010 10110111

    o,, 00001111 o,, 01100000

    3. Los bits 3 y 4 de una operacin de memoria tienen el cdigo siguiente:

    OO = PELO CASTAO, 01 = PELO NEGRO, 10 = PELO RUBIO, ll == CALVO. Utilizando la operacin Y, muestre cmo estos bits pueden or-denarse en un nico resultado de 8 bits. La posicin es XXXYYXXX, dondeX = bit desconocido, e Y = bit de cdigo.

    4. Invierta el signo de los siguientes operandos (con signo). Escriba sus equiva-lentes en decimal.

    00011111, 0101, 10101010

    5. Realice una rotacin a la izquierda sobre estos operandos:

    00101111, 1ooooooo6. Efecte una rotacin a la derecha sobre los siguientes operandos:

    00101111, 10000000

    7. Efecte una rotacin a la derecha con acarreo sobre estos operandos yacarreos:

    c = 1 00101111, c=o 10000000

    8. Efecte una rotacin a la izquierda con acarreo sobre estos operandos yacarreos:

    c =o 00101111, c = 1 100000009. Efecte un desplazamiento lgico a la derecha de los siguientes operandos.

    69

  • 5/29/2018 Matematicas Para Programadores_William Barden

    63/144

    Escriba el acarreo despus del desplazamiento, y el valor decimal de lorandos antes y despus de los desplazamientos:

    01111111, 01011010, 10000101, 10000000

    10. Efecte un desplazamiento lgico a la izquierda de los siguientes opera

    Escriba el acarreo despus del desplazamiento, y el valor decimal de lorandos antes y despus de los desplazamientos:

    01 ll 1111, 01011010, 10000101, 10000000

    ll. Efecte un desplazamiento lgico hacia la derecha sobre los siguientesrandos, y escriba los valores decimales antes y despus del desplazamie

    01111111, 10000101, 10000000

    70

  • 5/29/2018 Matematicas Para Programadores_William Barden

    64/144

    6Multiplicacin

    y divisin

    La mayora de los microordenadores actuales no incluyen instruccionesde multiplicacin y divisin. En consecuencia, estas operaciones han de ha-cerse en rutinas de software; al menos, en lenguaje mquina. En este cap-

    tulo analizaremos algunas de las formas en que la multiplicacin y divi-sin pueden realizarse en software.

    Zelda aprende cmo desplazar por s misma

    iHola, Don! iQu tal la comida?, pregunt Zelda, la camarera, a uningeniero de Inlog que acababa de llegar a la caja

    Bien, bastante bien. Bueno, la carne estaba un poco correosa...Sucede siempre que no es fresca, dijo Zelda cogiendo la cuenta.

    Veamos; una taza de caf... un sandwich de carne... y doce postres bajosen caloras... Cada vez que Zelda lea una partida de la cuenta, realizabaalgn tipo de operacin fuera del alcance de la vista en la caja registradora.En la ltima partida, doce postres bajos en caloras, tard mucho tiempo.

    Zelda, iquests haciendo?, pregunt el ingeniero.Vers, Don; Big Ed quiere que nos acostumbremos a trabajar en bi-

    nario, ya que este restaurante est en el centro de las industrias de microor-73

  • 5/29/2018 Matematicas Para Programadores_William Barden

    65/144

    denadores y todo eso. Quiere que hagamos todos los clculos en bpara que practiquemos. No me importa cuando se trata de sumar o pero la multiplicacin me vuelve loca.iQumtodo empleas, Zelda? Quiz pueda ayudarte.

    Cada vez que multiplico, hago una suma sucesiva. Como en esteen que tenas doce postres. Cada uno cuesta 65 centavos, as que 1100, que es doce en binario, 65 veces.

    S, eso realmente es correcto; de acuerdo, dijo Don, tratando rerse. Ese mtodo de suma sucesiva es vlido, pero lleva mucho tiPermteme que te ensee un mtodo ms rpido; se llama desplazamy suma.n

    Rpidamente hizo sitio en el mantel de una mesa cercana, amnando un poco los cubiertos y dems objetos. Sac un portaminas. E

    pena que no tengamos papel cuadriculado, pero los cuadros del mservirn.

    Tomemos estos 65 centavos por postre para un ejemplo de docdades. Antes de nada, dibujaremos dos registros. El registro del prparcial tiene una amplitud de 16 bits; as (vase la figura 6.1). El rede los multiplicandos tiene una amplitud de 8 bits. Entonces, en losbits de arriba del registro del producto parcial pondremos los domul t i p l i cador . Lo hemos rellenado a ceros hasta ocho bits para o0000 1100. El resto del registro ser una serie de ceros. Seguidampondremos el multiplicando en el registro del multiplicando.

    MULTIPLICADOR

    ACARREO

    L l - l00 0 0 1 1 0 0 0 0 0 0 0 0 0 0 REGISTRO DE PRODUCT

    _

    PARCIALES12)

    SUMA

    01000001 REGISTRO DELMULTIPLICANDO

    65)Figura 6.1. Multiplicacin por desplazamiento y suma

    Ya est todo preparado para hacer la multiplicacin. Daremospasos para ello. Los ingenieros informticos los denominamos iteracPara cada iteracin, desplazaremos el multiplicador una posicin haizquierda; el bit desplazado fuera ir al acarreo. Si el bit del acarreo es

    74

  • 5/29/2018 Matematicas Para Programadores_William Barden

    66/144

    sumaremos el multiplicando al registro del producto parcial. Si el bit delacarreo es un cero, no haremos la suma. Al final de las ocho iteraciones,estar hecho.

    Pero, jnose destruir el contenido del multiplicador de ocho bits de arri-ba al sumar el registro del producto parcial?, pregunt Zelda, obviamenteorgullosa de haber aprendido un poco de la jerga de los ordenadores.

    No, no se destruir. Recuerda que los datos se desplazan a fin de hacersitio para la posible expansin del producto parcial. Despus de ocho ite-raciones se habr desplazado totalmente, y el registro del producto parcialser el producto final de la multiplicacin. Mira, he dibujado todas lasiteraciones para este caso (vase la figura 6.2).

    iOh, s! Muchas gracias, Don. Seguro que lo utilizar. Ahora, djame elresto de tu cuenta. El total es 15.63 ms los impuestos. Eso es 1563 cen-tavos dividido por cien veces seis. Veamos: 011000011011 menos 01100100da 010110110111; esto es una vez. 010110110111 menos 01100100 da

    010101010011; esto es dos veces. Restando 01100100 a...

    Algoritmos de multiplicacin

    Sumas sucesivas

    Zelda utilizaba un mtodo de multiplicacin sencillo, llamado suma su-cesiva (Fig. 6.3). En l, el multiplicando (nmero que ha de ser multiplicado)

    es multiplicado por el multiplicador. El proceso se realiza haciendo cero unresultado llamado producto parcial y sumando el multiplicando al productoparcial por el nmero de veces indicado por el multiplicador. El ejemploanterior era 65 veces 12, que Zelda resolvi sumando 12 al producto parcial65 veces.

    Aunque este mtodo es sencillo, es muy largo en la mayora de loscasos. Supongamos que trabajamos con una multiplicacin ocho por ocho.Una multiplicacin de 8 por 8 bits produce un resultado de 16 bit