Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
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
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
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.
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
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
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.
Solución.
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:
Se toman grupos de tres cifras para base ocho y grupos de cuatro cifras para base dieciséis de la siguiente
forma:
Solución.
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.
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
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.
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 .
Solución.
∼ (111010)2 = (000101)2
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?
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/
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
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:
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.
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:
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
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).
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:
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.
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:
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.
Parte fraccionaria
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
10
4. Mantisa
Son los dígitos después del punto en el número normalizado. Agregamos ceros a la izquierda.
00000000 00110110 00001100
6. Construir el número
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