You are on page 1of 6

Representaciones de enteros y algoritmos.

Introducción:

Los enteros pueden ser expresados usando cualquier entero mayor que uno como base, como
mostraremos en esta sección. A pesar de que comúnmente usamos representaciones decimales, las
representaciones binarias, octal y hexadecimal son usadas a menudo, especialmente en la ciencia
de la computación. Dada una base b y un entero n, mostraremos como construir la representación
en base b de este entero. También explicaremos como rápidamente cambiar las notaciones entre
las representaciones en binario a octal y de binario a hexadecimal.

Como fue mencionado en la sección 3.1, el termino algoritmo, originalmente se refería a


procedimientos para la realización de operaciones aritméticas usando las representaciones
decimales de enteros. Estos algoritmos adaptados para usarse con representaciones binarias, son
las bases para la aritmética computacional. Ellos proveen buenas ilustraciones del concepto de un
algoritmo y de la complejidad de los algoritmos. Por estas razones, serán discutidos en esta sección.

También presentaremos un algoritmo para encontrar a div d y a mod d donde a y d son enteros con
d> 1. Finalmente, describiremos un algoritmo eficiente para la exponenciación modular, que es un
algoritmo particularmente importante para la criptografía, ya que lo haremos ver en la Sección 4.6.

REPRESENTACIÓN DE LOS ENTEROS:

En la vida cotidiana usamos la notación decimal para expresar números enteros. Por ejemplo, 965
se usa para denotar 9 · 102 + 6 · 10 + 5. Sin embargo, a menudo es conveniente usar bases que no
sean 10. En particular, las computadoras generalmente usan notación binaria (con 2 como base) al
realizar operaciones aritméticas y notación octal (base 8) o hexadecimal (base 16) cuando se
expresan caracteres, como letras o dígitos. De hecho, podemos usar cualquier número entero mayor
que 1 como base cuando expresamos números enteros. Esto se afirma en el Teorema 1

Teorema 1:

Sea b un número entero mayor que 1. Entonces, si n es un entero positivo, se puede expresar de
forma única en la forma:

n = akbk + ak−1bk−1 +···+ a1b + a0,

Donde k es un entero no negativo, a0, a1,..., ak son enteros no negativos menores que b, y ak ̸= 0.

Una demostración de este teorema puede construirse usando la inducción matemática, un método
de prueba que se analiza en la Sección 5.1. También se puede encontrar en [Ro10]. La
representación de n dada en el Teorema 1 se llama expansión base b de n. La expansión base b de
n se denota por (akak-1... a1a0) b. Por ejemplo, (245) 8 representa 2 · 82 + 4 · 8 + 5 = 165. Típicamente,
el subíndice 10 se omite para las expansiones en base 10 de enteros porque la base 10, o
expansiones decimales, se usan comúnmente para representar enteros.
EXPANSIONES BINARIAS

Elegir 2 como base da expansiones binarias de enteros. En notación binaria, cada dígito es 0 o 1. En
otras palabras, la expansión binaria de un entero es solo una cadena de bits. Las expansiones
binarias (y las expansiones relacionadas que son variantes de las expansiones binarias) son usadas
por las computadoras para representar y hacer aritmética con enteros.

Ejemplo 1.

¿Cuál es la expansión decimal del entero que tiene (1 0101 1111)2 como su expansión binaria?

(1 0101 1111)2= 1*28+0*27+1*26+0*25+1*24+1*23+1*22+1*21+1*20=351

EXPANCIONES HEXADECIMAL Y OCTAL

Entre las bases más importantes en ciencias de la computación se encuentran la base 2, la base 8 y
la base 16. Las expansiones de la base 8 se denominan expansiones octales y las expansiones de la
base 16 son expansiones hexadecimales.

Ejemplo 2.

¿Cuál es la expansión decimal del número con expansión octal (7016) 8?

Solución: Usar la definición de una expansión base b con b = 8 nos dice que:

(7016)8 = 7 · 83 + 0 · 82 + 1 · 8 + 6 = 3598.

Se requieren dieciséis dígitos diferentes para las expansiones hexadecimales. Por lo general, los
dígitos hexadecimales utilizados son 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F, donde las letras A a F
representan los dígitos correspondientes a los números 10 a 15 (en notación decimal).

Ejemplo 3.

¿Cuál es la expansión decimal del número con expansión hexadecimal (2AE0B) 16?

Solución: Usar la definición de una expansión base b con b = 16 nos dice que:

(2AE0B)16 = 2 · 164 + 10 · 163 + 14 · 162 + 0 · 16 + 11 = 175627.

Cada dígito hexadecimal se puede representar utilizando cuatro bits. Por ejemplo, vemos que (1110
0101) 2 = (E5) 16 porque (1110) 2 = (E) 16 y (0101) 2 = (5) 16. Los bytes, que son cadenas de bits de
longitud ocho, se pueden representar con dos dígitos hexadecimales.
CONVERSION DE BASE

Ahora describiremos un algoritmo para construir la expansión base b de un entero n. Primero, divida
n por b para obtener un cociente y el resto, es decir,

n = bq0 + a0, 0 ≤ a0 < b.

El resto, a0, es el dígito más a la derecha en la expansión base b de n. Luego, divide q 0 por b para
obtener:

q0 = bq1 + a1, 0 ≤ a1 < b.

Vemos que a1 es el segundo dígito de la derecha en la expansión base b de n. Continúe este proceso,
dividiendo sucesivamente los cocientes entre b, obteniendo dígitos base b adicionales como los
restantes. Este proceso termina cuando obtenemos un cociente igual a cero. Produce los dígitos
base b de n de la derecha a la izquierda.

Ejemplo 4.

Encuentra la expansión octal de (12345) 10.

Solución: Primero, divida 12345 por 8 para obtener:

12345 = 8 · 1543 + 1.

Sucesivamente dividiendo los cocientes por 8 da:

1543 = 8 · 192 + 7,

192 = 8 · 24 + 0,

24 = 8 · 3 + 0,

3 = 8 · 0 + 3.

Los restos sucesivos que hemos encontrado, 1, 7, 0, 0 y 3, son los dígitos de la derecha a la izquierda
de 12345 en la base 8. Por lo tanto,

(12345) 10 = (30071) 8.

Ejemplo 5.

Encuentre la expansión hexadecimal de (177130) 10.

Solución: Primero divide 177130 por 16 para obtener:

177130 = 16 · 11070 + 10.

Sucesivamente dividiendo los cocientes por 16 da:

11070 = 16 · 691 + 14,

691 = 16 · 43 + 3,

43 = 16 · 2 + 11,
2 = 16 · 0 + 2.

Los restos sucesivos que hemos encontrado, 10, 14, 3, 11, 2, nos dan los dígitos de la derecha a la
izquierda de 177130 en la expansión hexadecimal (base 16) de (177130) 10. Resulta que:

(177130) 10 = (2B3EA) 16.

(Recuerde que los enteros 10, 11 y 14 corresponden a los dígitos hexadecimales A, B y E,


respectivamente.)

Ejemplo 6.

Encuentre la expansión binaria de (241) 10.

Solución: Primero divide 241 por 2 para obtener:

241 = 2 · 120 + 1.

Sucesivamente dividiendo los cocientes por 2 da:

120 = 2 · 60 + 0,

60 = 2 · 30 + 0,

30 = 2 · 15 + 0,

15 = 2 · 7 + 1,

7 = 2 · 3 + 1,

3 = 2 · 1 + 1,

1 = 2 · 0 + 1.

Los restos sucesivos que hemos encontrado, 1, 0, 0, 0, 1, 1, 1, 1, son los dígitos de la derecha a la
izquierda en la expansión binaria (base 2) de (241) 10. Por lo tanto,

(241) 10 = (1111 0001) 2.

El pseudocódigo dado en el algoritmo 1 encuentra la expansión base b (ak-1... a1a0) b del entero n.
ALGORITMO 1 CONSTRUYENDO EXPANSIONES BASE b.

procedure expansión base b (n, b: enteros positivos donde b > 1)


q: = n
K: = 0
while q ̸= 0
ak: = q mod b
q:= q div b
K:= k + 1
return (ak−1,. . ., a1, a0) {(ak−1. . . a1a0) b es la expansión base b de n}

En el algoritmo 1, q representa el cociente obtenido por divisiones sucesivas por b, comenzando con
q = n. Los dígitos en la expansión base b son los restos de estas divisiones y están dados por q mod
b. El algoritmo finaliza cuando se alcanza un cociente q = 0.

Observación: Tenga en cuenta que el Algoritmo 1 se puede considerar como un algoritmo codicioso,
ya que los dígitos base b se toman lo más grande posible en cada paso.

CONVERSIÓN ENTRE EXPANSIONES BINARIAS, OCTALES Y HEXADECIMALES

La conversión entre binario y octal y entre expansiones binarias y hexadecimales es


extremadamente fácil porque cada dígito octal corresponde a un bloque de tres dígitos binarios y
cada dígito hexadecimal corresponde a un bloque de cuatro dígitos binarios, con estas
correspondencias mostradas en la Tabla 1 sin 0 iniciales . (Lo dejamos como Ejercicios 13-16 para
mostrar que este es el caso.) Esta conversión se ilustra en el Ejemplo 7.

Ejemplo 7.

Encuentre las expansiones octales y hexadecimales de (11 1110 1011 1100) 2 y las expansiones
binarias de (765) 8 y (A8D) 16.

Solución: Para convertir (11 1110 1011 1100) 2 en notación octal, agrupamos los dígitos binarios en
bloques de tres, agregando los ceros iniciales al inicio del bloque de la izquierda si es necesario.

Estos bloques, de izquierda a derecha, son: 011, 111, 010, 111 y 100, que corresponden a 3, 7, 2, 7,
y 4, respectivamente. En consecuencia, (11 1110 1011 1100) 2 = (37274) 8. Para convertir (11 1110
1011 1100) 2 en notación hexadecimal, agrupamos los dígitos binarios en bloques de cuatro,
añadiendo ceros iniciales al inicio del bloque de la izquierda si es necesario. Estos bloques, de
izquierda a derecha, son: 0011, 1110, 1011 y 1100, que corresponden a los dígitos hexadecimales 3,
E, B y C, respectivamente. En consecuencia, (11 1110 1011 1100) 2 = (3EBC) 16.
Para convertir (765) 8 en notación binaria, reemplazamos cada dígito octal por un bloque de tres
dígitos binarios. Estos bloques son: 111, 110 y 101. Por lo tanto, (765) 8 = (1 1111 0101) 2. Para
convertir (A8D) 16 en notación binaria, reemplazamos cada dígito hexadecimal por un bloque de
cuatro dígitos binarios. Estos bloques son 1010, 1000 y 1101. Por lo tanto, (A8D) 16 = (1010 1000
1101) 2.

You might also like