Está en la página 1de 11

Introducción a la Programación, 2022-1

Nota de clase 03: Estructura lógica de una computadora

Manuel Soto Romero

11 de febrero de 2022
Colegio de Ciencia y Tecnología UACM

En la nota anterior revisamos la arquitectura de von Neumann, misma en la que están basados los pro-
cesadores modernos y revisamos cómo se realiza el paso de instrucciones entre los distintos componentes
hasta llegar a los resultados esperados. Sin embargo, nos quedamos con una conversión de las instrucciones
en ensamblador a código máquina muy vaga.

En esta nota revisaremos los sistemas de numeración entendidos por una computadora y las transfor-
maciones que se tienen que realizar para poder pasar entre sistemas para finalmente entender cómo son
representados los datos en las computadoras modernas.

3.1. Sistemas de numeración

Existen diversos sistemas de numeración que se definen de acuerdo a la base que representan. En general,
en un sistema de numeración de base n se utilizan n símbolos, también llamados guarismos. Los sistemas
más utilizados, especialmente en computación, son:

Sistema decimal
Es un sistema de base 10, se usan los siguientes símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9. Es denotado
por (N )10 . Por ejemplo: (1729)10 .

Sistema binario
Es un sistema de base 2, se usan los símbolos 0 y 1. Como comentamos anteriormente, este es el
lenguaje que usan las computadoras. Es denotado por (N )2 . Por ejemplo: (10011110101)2 .

Sistema octal
Es un sistema de base 8, se usan los siguiente símbolos: 0, 1, 2, 3, 4, 5, 6 , 7. Es denotado por (N )8 .
Por ejemplo: (2343257)8 .

Sistema hexadecimal
Es un sistema de base 16, se usan los siguientes símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E,
F. Las letras tienen la siguiente equivalencia: A = 10, B = 11, C = 12, D = 13, E = 14, F = 15.
Por ejemplo: (7A4CE6B)16 .

1
Los sistemas de numeración son de notación posicional, es decir, el valor que se le asigna a una cantidad
depende de la posición relativa de sus símbolos. Por ejemplo, el símbolo 2 toma un valor diferente en los
números 20 y 2000. Los sistemas de numeración que utilizan notación posicional se escriben mediante la
siguiente estructura:

m
X
(N )a = xi ai
i=n

N es el número a representar
a es la base
Σ es la operación suma
i es la posición
n son los dígitos a la izquierda del punto, menos uno
m son los dígitos a la derecha del punto
x cada dígito del número

Ejemplo 3.1. Representar en notación posicional el número (32498.567)10 .

Solución.

32498.567 = (3) 104 + (2) 103 +(4) 102 + (9) 101 + (8) 100 +(5) 10−1 + (6) 10−2 + (7) 10−3 = 30000 +
2000 + 400 + 90 + 8 + 0.5 + 0.06 + 0.007

3.1.1. Conversiones entre sistemas de numeración

1. Conversiones de números expresados en cualquier base a base diez

Para transformar un número en base diez a otra base, se aplica el algoritmo revisado para la notación
posicional usando la base en la que se encuentra representado el número.

Ejemplo 3.2. Transformar el número (1010.1010)2 a decimal.

Solución.

(1010.1010)2 = (1) 23 +(0) 22 +(1) 21 +(0) 20 +(1) 2−1 +(0) 2−2 +(1) 2−3 = 8+2+0.5+0.125 = 10.625

2. Conversiones de números enteros expresados en base diez a cualquier base

Para convertir un número entero en base diez a una base a, se divide reiteradamente el número original
por a y los residuos serán en orden de inverso, las cifras que componen al número. El proceso continúa
mientras los cocientes obtenidos no sean cero.

2
Ejemplo 3.3. Transformar el número (562)10 a base octal.

Solución.

070 08 1 0
8 562 8 70 8 8 8 1
002 06 0 1
002

Leemos los residuos en orden inverso.

∴ El número buscado es (1062)8

3. Conversiones de números fraccionarios expresados en base diez a cualquier base

Para convertir un número fraccionario expresado en base diez a una base a, se multiplica reiteradamente
por a la parte fraccionaria y los números antes del punto serán, en orden de arriba hacia abajo, los símbolos
que componen al número. El proceso se repite hasta que la parte fraccionaria sea cero o que la obtención
de componentes se vuelva cíclica.

Ejemplo 3.4. Transformar el número (0.18)10 a base hexadecimal.

Solución.

0.18 (16) = 2 + 0.88, x−1 = 2


0.88 (16) = 14 + 0.08, x−2 = 14 = E
0.08 (16) = 1 + 0.28, x−3 = 1
0.28 (16) = 4 + 0.48, x−4 = 4
0.48 (16) = 7 + 0.680, x−5 = 7
0.68 (16) = 10 + 0.88, x−6 = 10 = A

Leemos el número de arriba hacia abajo ↓



∴ El número buscado es 0.2E147A 16

4. Conversiones de números de una base a a una base b

Para convertir un número escrito en una base a a otra base b, se debe transformar primero el número
representado en base a a base 10 por medio de la expresión de sistemas posicionales y posteriormente
convertirlo a la base b por medio de divisiones sucesivas si es entero o multiplicaciones sucesivas si es
fraccionario.

(N )a ⇒ (N )10 ⇒ (N )b

3
5. Conversiones de números binarios a base octal o hexadecimal y viceversa

Cuando se desea transformar un número binario a base ocho o dieciséis y viceversa, se aplica la siguiente
tabla de conversión:

Decimal Binario Octal Hexadecimal


0 0000 0 0
1 0001 1 1
2 0010 2 2
3 0011 3 3
4 0100 4 4
5 0101 5 5
6 0110 6 6
7 0111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F

Se toman grupos de tres cifras para base ocho y grupos de cuatro cifras para base dieciséis de la siguiente
forma:

De derecha a izquierda cuando es una parte entera.


De izquierda a derecha cuando se trata de una fracción.

Ejemplo 3.5. Transformar el número (101011111.100)2 a base ocho.

Solución.

101 011 111 . 100


De acuerdo a la tabla se cumple que , de forma que el número obtenido es
5 3 7 4
(537.4)8

Ejemplo 3.6. Transformar el número (6352.41)8 a base 2.

Solución.

6 3 5 2 . 4 1
De acuerdo a la tabla se cumple que , de forma que el número
110 011 101 010 100 001
obtenido es (110011101010.100001)2

4
Ejemplo 3.7. Transformar el número (111001100101.1010)2 a base 16.

Solución.

1110 0110 0101 . 1010


De acuerdo a la tabla se cumple que , de forma que el número obtenido
E 6 5 A
es (E65.A)16

Ejemplo 3.8. Transformar el número (C9D3.F 7)16 a base 2.

Solución.

C 9 D 3 . F 7
De acuerdo a la tabla se cumple que , de forma que el
1100 1001 1101 0011 1111 0111
número obtenido es (1100100111010011.11110111)16

3.2. Operaciones con números binarios

Las operaciones aritméticas con números en cualquier base cumplen reglas similares al sistema decimal.
Para los fines de estas notas basta con revisar la suma y completo a 1, sin embargo, también existen otras
operaciones básicas como la resta, multiplicación y división.

3.2.1. Suma

Dos números se pueden sumar de forma similar a como se hace en el sistema decimal, la única diferencia
ocurre cuando se presenta la operación del símbolo más grande más uno, se escribe 0 y se tienen un acarreo
de 1.

Ejemplo 3.9. Realizar la suma (1001)2 + (1011)2

Solución.

acarreo 1 1 1
1 0 0 1
+ 1 0 1 1
− − − − −
1 0 1 0 0

5
3.2.2. Complemento a 1

Consiste en invertir los bits de un número binario, es decir, los ceros se vuelven unos y viceversa. Se denota
por ∼ (N )2 .

Ejemplo 3.10. Calcular el complemento a 1 del número (111010)2 .

Solución.

∼ (111010)2 = (000101)2

3.3. Representación de la información

Ahora que hemos revisado la forma en que una computadora almacena datos e instrucciones mediante
el sistema binario, estudiaremos cómo es que la computadora interpreta estos códigos. Una computadora
utiliza binario para representar símbolos, números y otros datos pero... ¿Cómo lo hace?

3.3.1. Representación de caracteres

Existen diversos estándares para la codificación de símbolos como letras, signos de puntuación y demás
a los cuales llamamos caracteres. Estos estándares sirven para que la información que se transmite del
usuario a la computadora o entre sistemas sea comprensible. Los códigos en estos estándares son los que
comúnmente encontramos en nuestro teclado. Los estándares más usados son:

Código ASCII
American Standard Code For Information Interchage
Es un estándar que asigna valores numéricos a letras, números, signos de puntuación y otros símbolos.
Incluye 256 códigos divididos en dos conjuntos: estándar y extendido. Cada conjunto incluye 128
códigos. Con estos conjuntos se pueden representar todas las combinaciones posibles de 7 u 8 bits.
El conjunto estándar utiliza 7 bits para cada código y el conjunto extendido 8 bits. Dando como
resultado 255 códigos.
En el conjunto de caracteres ASCII básico, los primeros 32 valores están asignados a los códigos
de control de comunicaciones y de impresora, caracteres no imprimibles, como retroceso, retorno de
carro y tabulación empleados para controlar la forma en que la información es transferida desde una
computadora a otra o desde una computadora a una impresora. Los 96 códigos restantes se asignan
a los signos de puntuación, a los dígitos del 0 al 9 y a las letras mayúsculas y minúsculas del alfabeto
latino.
Código EBCDIC
Extended Binary Coded Decimal Interchage Code
Es un estándar de codificación desarrollado por IBM para utilizarlo en sus computadoras. Es análogo
al conjunto básico de ASCII, se diferencia por utilizar 8 bits para la codificación, lo que permite 256
caracteres. Este estándar de codificación es utilizado principalmente por mainframes y microcompu-
tadoras de IBM.

6
Unicode
Es un estándar de codificación diseñado para facilitar en tratamiento de información, transmisión
y visualización de textos de múltiples lenguajes. El término Unicode proviene de sus tres objetivos
perseguidos: universalidad, uniformidad y unicidad.
Este estándar es mantenido por el Unicode Technical Committee (UTC), integrado en el Consorcio
Unicode, del que forman parte con un distinto grado de implicación empresas como: Microsoft, Apple,
Meta, Oracle, Google y Twitter e instituciones como la Universidad de Berkeley.
La descripción completa del estándar y las tablas de caracteres están disponibles en la página web
oficial de Unicode.

https://home.unicode.org/

3.3.2. Representación de números enteros

Ya hemos visto cómo representar números en base dos, sin embargo, estos números tienen la peculiaridad
de ser convenientemente positivos. Existen diversas formas de expresar números enteros negativos. A
continuación revisaremos un proceso que se basa en el uso de la notación Complemento a dos.

Ejemplo 3.11. Consideremos una máquina con enteros de 32 bits. Supongamos que se tiene el valor
entero 13. La representación en 32 bits de 13 es:

06 3 1 0
2 13 2 6 2 3 2 1
01 0 1 1

leyendo los residuos en orden inverso y agregando ceros a la izquierda se tiene el número

00000000 00000000 00000000 00001101

Para formar el negativo de 13, primero formamos su complemento a uno.

11111111 11111111 11111111 11110010

Para formar el complemento a dos de 13 simplemente sumamos uno al complemento a uno de 13. Por
lo tanto el complemento a dos de 13 es:

11111111 11111111 11111111 11110010


+ 00000000 00000000 00000000 00000001
− −−−−− −−−−− −−−−− −−−−−
11111111 11111111 11111111 11110011

Ahora, si esto de hecho es igual a −13, deberíamos poder sumarlo al 13 binario y obtener como
resultado 0. Comprobemos esto:

7
00000000 00000000 00000000 00001101
+ 11111111 11111111 11111111 11110011
− −−−−− −−−−− −−−−− −−−−−
1 00000000 00000000 00000000 00000000

El 1 de acarreo que sale de la columna que está más a la izquierda se descarta, y sin duda, obtenemos
0 como resultado. Si sumamos el complemento a uno de un número a ese mismo número, todos los
dígitos serían iguales a 1. La clave para obtener un resultado en el que todos los dígitos sean cero es
que el complemento a dos es uno más el complemento a uno. La suma de 1 hace que el resultado de
cada columna sea 0 y se acarrea un 1. El acarreo sigue desplazándose hacia la izquierda hasta que se
descarta el número que está más a la izquierda, con lo que todos los dígitos del número restante son
iguales a cero.

3.3.3. Representación de números reales

Representar números reales es una tarea mucho más compleja pues requiere aplicar todos los conceptos
que hemos revisado a lo largo de esta nota. En general, se tienen dos formas de representar números reales:

Representación en punto fijo.


Representación en punto flotante.

Representación en punto fijo

En esta forma de representación se asigna, tal como su nombre lo indica, una posición fija al punto decimal.
Por ejemplo, si se opera con números binarios de ocho bits, el punto puede situarse de forma arbitraria en
cualquiera de las posiciones, pero una vez elegida no se modifica.

La principal ventaja de este método de representación es que los algoritmos de realización de las diferentes
operaciones son los mismos que para los números enteros.

Ejemplo 3.12. Sean los siguientes números de ocho bits con dos decimales: (011011.11)2 y
(100001.01)2 . La suma de ambos números es:

011011.11
+ 100001.01
− −−−−−
111101.00

y se observa que la operación se realiza como si los números fuesen enteros.

El principal inconveniente de la representación en punto fijo es que no se aprovecha la capacidad de


los operadores aritméticos. En efecto, si se suponen al igual que antes, números de ochos bits con dos
fraccionarios, el máximo número que puede representarse es 111111.11 y el mínimo distinto de cero es
0.01. Pero la capacidad de los operadores podría permitir operar el número máximo 11111111 y el mínimo
0.0000001.

8
Representación en punto flotante

Este modo de representación evita el inconveniente mencionado en la representación en punto fijo. Dado
el enorme rango de magnitud en que pueden variar los números reales, y la imposibilidad de almacenar
todas sus cifras, los sistemas de computación adoptan formas de representación basadas en la notación
exponencial, y que constituyen la notación de punto flotante.

Esto se basa en que un número real cualquiera n puede descomponerse en el producto de dos factores:

n = mbe , donde:

1. m es la mantisa, menor que la unidad y con una cantidad dada de cifras significativas (es decir, la
primera de ellas es distinta de cero).

2. be es un factor exponencial igual a la base de numeración b, elevada a un exponente o característica


e; esta característica indica cuantos lugares debe recorrerse el punto decimal.

Ejemplo 3.13. En el sistema de numeración decimal, un número ejemplo de formato de punto flotante
es 2.25 × 104 . Pero este número puede representarse de muy diversas maneras:

2.25 × 104 = 0.0225 × 106 = 225000 × 10−1 = ...

que se diferencian por la posición del punto en la mantisa y el valor del exponente.

De todas las posibles formas de representar un número en punto flotante la que se utiliza en la práctica y
se define como normalizada es aquella en que el punto decimal se coloca antes de la cifra más significativa
distinta de cero. En el ejemplo dado anteriormente, la representación normalizada es: 0.225 × 105 donde
mantisa = 0.225 y exponente = 5.

Entonces, en una palabra de la memoria se deben almacenar juntos el exponente y la mantisa.

Por ejemplo, para una palabra de 4 bytes:

1 byte 3 bytes
Signo mantisa Exponente Mantisa
Palabra de 4 bytes (puede tener una longitud de 2, 4 o más bytes)

Debido a que no existe uniformidad entre los distintos equipos y lenguajes en cuanto al lugar y extensión
que ocupan exponente y mantisa dentro de una palabra, se comentará una de las variantes más frecuentes:

1. El primer bit del byte es 0 si el número es positivo y 1 si es negativo.

2. Los dígitos binarios de la mantisa se encuentran a partir del segundo byte sin emplear el complemento
a 2. Se rellena con ceros en caso de ser necesario. Adoptaremos la convención de rellenar a la izquierda.

3. Los siete bits restantes del primer byte contienen un número binario. Sumando 64 a dicho número
se obtiene el exponente. En siete bits se pueden almacenar enteros entre 0 y 127. Para obtener este
número se usa e + 2p−1 donde e es el exponente y p es el número de bits, en este caso 7.

9
Ejemplo 3.14. Representar el número 1729.625 en una palabra de 32 bits.

1. Convertir el número a binario.


Parte entera

0864 432 216 108 054 27 13 06


2 1729 2 864 2 432 2 216 2 108 2 54 2 27 2 13
012 06 03 01 008 14 07 01
0009 004 012 016 000 00 01
0001 000 000 000
3 1 0
2 6 2 3 2 1
0 1 1

Leyendo los residuos en orden inverso: 11011000001

Parte fraccionaria

0.625 × 2 = 1 + 0.25 x−1 = 1


0.25 × 2 = 0.50 x−2 = 0
0.50 × 2 = 1 x−3 = 0
Leyendo de arriba hacia abajo ↓: 100

∴ El número final es: (11011000001.100)2

2. Normalizar el número
La cifra más significativa después del cero es 1, por lo tanto colocamos un punto después del
primer uno, quedando el número:
(0.11011000001100)2
Dado que recorrimos el punto, se tiene que
11011000001.100 = 0.11011000001100 × 211

3. Exponente
11 + 64 = 75 que en base 2 es:

37 18 09 4 2 1 0
2 75 2 37 2 18 2 9 2 4 2 2 2 1
15 17 00 1 0 0 1
01 01

Leyendo los residuos en orden inverso: 1001011

10
4. Mantisa
Son los dígitos después del punto en el número normalizado. Agregamos ceros a la izquierda.
00000000 00110110 00001100

5. Bit del signo


0 por ser positivo.

6. Construir el número

Signo Exponente Mantisa


1729.0625 =
0 1001010 00000000 00110110 00001100

Referencias

[1] José M. Becerra, Notas de clase de Matemáticas IV, Escuela Nacional Preparatoria UNAM.

[2] Jorge G. Iglesias, Elena Ortiza, Introducción a la Informática, I&0, Décima Edición, 2007.

[3] Alejandra Andrade, Diana Cruz, et. al. Programación estructurada y modular en el lenguaje C, UACM,
Primera Edición, 2010.

11

También podría gustarte