Portada arrow Algoritmos arrow Cambio de base de un número natural
Cambio de base de un número natural
viernes, 09 de marzo de 2007
Índice del Artículo
Cambio de base de un número natural
Hexadecimal, binario y octal
Algoritmo: De cualquier base a su valor
Algoritmo: De natural a cualquier base
Optimizaciones

Leonardo de Pisa 'Fibonacci' Un número natural es un concepto (los naturales son aquellos enteros mayores o iguales que el cero). Un numero no se puede tocar ni comer, aunque nos sirve para contar y medir cosas que se tocan o se comen. No obstante, necesitamos una forma de representar ese concepto. En el mundo occidental utilizamos los dígitos  '0', '1', '2', '3', '4', '5', '6', '7', '8', y '9', introducidos por Leonardo de Pisa (Fibonacci) en la matemática occidental desde la matemática árabe junto con un sistema de representación posicional en base 10, o simplemente "decimal"... pero esa no es la única forma de representar un número.

En éste artículo vamos a reflexionar acerca de lo que significa representar un número en contraposición al concepto del propio número. Nos centraremos en el sistema de representación utilizando una base, como por ejemplo la decimal, y cómo construir un par de algoritmos que nos permitan trabajar con la representación en cualquier base del número. También hablamos acerca de los sistemas de numeración que se utilizan comunmente en informática: el binario y el hexadecimal (base 16).


Hay muchas formas de representar un número, pero estamos tan acostumbrados a tratar con el sistema decimal que a menudo confundimos el concepto de número con su representación gráfica.

Por ejemplo... piensa en el número 5. Yo también estoy pensando en él. Los dos tenemos ahora en nuestra cabeza el concepto de ese número... y para transmitirlo he tenido que utilizar un símbolo... éste:

5

Tú y yo conocemos el sistema decimal y por eso entiendes el concepto del número 5, pero podría haber utilizado otra simbología que ambos conozcamos... por ejemplo,

cinco

o esta, que utilizaban los romanos:

V

o cualquiera de éstas:

Aunque el símbolo cambie, el número sigue siendo el mismo. Los matemáticos hacen una distinción entre lo que llaman número y lo que llaman numeral. Mientras que el número es un concepto, el conjunto de símbolos que se utilizan para representarlo en sistema concreto es el numeral. Así pues, el símbolo "5" es un numeral que utilizamos junto con el sistema en base 10 o decimal. El número 5 es lo que tú y yo ahora mismo tenemos en la cabeza y representamos con el numeral "5".

Bueno, vale... hay distintas maneras de representar el número cinco, pero... ¿A qué viene este rollo?

Pues simplemente, porque aunque normalmente hablamos de "Cambiar de base un número" (como he hecho yo en el título de éste artículo), el número no cambia... simplemente, escogemos un método distinto para representarlo.

Sabemos que los ordenadores utlizan el binario para codificar los números... pero realmente, nosotros no podemos cambiar de base un número... sino representarlo en una base cualquiera... es decir... si nuestro compilador tiene un tipo para almacenar enteros (int, integer o similar), una variable de ese tipo contendrá un determinado número entero, que es totalmente independiente del sistema interno que el ordenador o el compilador utilicen para representarlo. Cuando nosotros utilizamos una orden para obtener la representación escrita de ese número, es entonces cuando se nos presentan las cifras que lo representan en base decimal. Quizá los ordenadores del futuro utilicen otro sistema distinto del binario para representar los naturales... Quizá un pequeño duende dentro de la CPU pintando rayitas... como éste:

Da igual... el caso es que cuando nosotros imprimamos por pantalla la representación del número que gestiona ese duende, nos saldra por pantalla un '1' y un '7... es decir, 17.

Así pues, el algoritmo de éste artículo, no va a cambiar la naturaleza de un entero, sino que va a obtener la representación en cualquier base de un número natural.

El sistema de bases es bien conocido por todos nosotros... lo utilizamos de manera muy intuitiva.  La representación decimal de los números que utilizamos corresponde a un sistema que llamamos posicional. En este sistema, cada dígito de la representación de un número toma un determinado valor que corresponde con su posición dentro de la representación. Hay otros sistemas que no son posicionales, por ejemplo, el que utiliza el duende de arriba.

Cuando utilizamos una base decimal (dicen que utilizamos esta base por el hecho de tener 10 dedos en las manos) a la hora de representar un número natural, lo escribimos como una serie de dígitos (del 0 al 9). Al dígito de más a la izquierda le llamamos "Dígito Más significativo", y al de la derecha, "Dígito Menos Significativo". Es decir, el más significativo tiene más valor debido a su posición, y el menos significativo menos valor.

En el sistema decimal, el valor real de un número se calcula sumando una serie de términos. Cada término esta formado por: el valor del dígito, multiplicado por 10 elevado a la posición que ocupa. Las posiciones se numeran desde el dígito menos significativo al más significativo. El dígito menos significativo se dice que es la posición 0... el de su izquierda la 1, el siguiente a la izquierda la 2... y así hasta llegar al más significativo.

Por ejemplo, si tomamos el número 7156 en decimal, el 6 está en la posición 0, el 5 en la posición 1, el 1 en la 2 y el 7 en la 3. Así pues, su valor es: 7×103+1×102+5×101+6×100

Vale... Si nos dan la representación en decimal de un número, podemos saber cual es el valor de ese número... fantástico. Pues el mismo sistema nos vale para cualquier otra base... por ejemplo, si presento el número 15764 y te digo que está en base 8 ¿Qué número es realmente? (Ojo... la base 8 utiliza los dígitos 0 a 7)... te puedo decir una cosa, no es el quicemil setecientos sesenta y cuatro. (Nota: voy a poner la base como un subíndice tras el número: 157648 Si no pongo nada, es que estoy utilizando la base 10. Ésto se suele hacer a menudo en matemáticas). Bueno... Vamos a ver qué número es éste...

157648=1×84+5×83+7×82+6×81+4×80=7156

Anda... pero ¡si es el mismo! 157648 es la representación en base 8 del mismo número que 7156 en base 10.

Bueno... pues ya tenemos claro algo: Si un entero x se representa en base b con i dígitos en la forma Xi-1,Xi-2... X1X0, su valor viene dado por la expresión

Esa expresión nos permitirá obtener un algoritmo tal que dada la representación en una base b de un número x podamos saber cuál es ese número.

Pero... ¿Y al revés? ¿Y si nos dan un número y tenemos que obtener su representación en una base cualquiera?. Vamos a verlo... Vamos a coger el mismo número de antes... el 7156

Si quisiera saber cuál es el dígito menos significativo de 7156 en base 10, simplemente tengo que dividir por 10 y quedarme con el resto de la división (también llamado módulo).

Es decir, si hallo el resto de la división de 7156 entre 10, me sale un 6. Pero si además, saco el cociente de la división entera, vale 715. Así pues, con la división entera y el módulo logramos separar por un lado el dígito menos significativo y por el otro, el resto de los dígitos. Si ahora repito la operación con el 715, logramos separar por un lado 71, y por otro el 5...

Recapitulando,

7156/10=7157156 mod 10 =6
715/10=71715 mod 10=5
71/10=771 mod 10=1
7/10=07 mod 10=7

En la última división hemos obtenido un 0, y a partir de ahí ya no nos hace falta seguir. Los módulos nos han ido dando los digitos en base 10 que conforman a nuestro número, desde el menos significativo al más, y las divisiones nos han permitido ir realizando el proceso.

Pues este mismo proceso nos sirve para obtener la representación en cualquier base. Vamos a probar con el 7156 y con la base 8:

7156/8=8947156 mod 8=4
894/8=111894 mod 8=6
111/8=13111 mod 8=7
13/8=113 mod 8=5
1/8=01 mod 8=1

A ver que nos dan los restos.... 1,5,7,6,4....Es decir... ¡157648!

Pues ya lo tenemos... Con esta forma de actuar podemos obtener un algoritmo tal que dado un número natural nos dé su representación en cualquier base.



 
←Artículo anterior   Artículo siguiente→

Categorías

Suscríbete

RSS feed Sindicación RSS

(¿Qué es la sindicación RSS?)


Suscribir por e-mail

¿Dónde estoy?

Estás en La tecla de ESCAPE, un sitio web personal en el que nos gusta hablar de algoritmos, informática, tecnología, ciencia, ingeniería, internet... y cualquier tontería que se nos ocurra. El punto de vista de nuestros artículos técnicos suele ser muy básico, así que a menudo adoptamos grandes simplificaciones. (Más...-Términos de uso)