Las bases numéricas son bastante importantes en las ciencias computaciones, pues desde que las computadoras se comunican con el sistema binario, los textos son codificados en base 256 al utilizar el ascii y nosotros los humanos vivimos en un mundo base 10 es importante aprender a traducir los números entre cada uno de estos mundos.
Antes de comenzar a programar creo que es importante entender como se representa un número en base b.
Sea N un numero escrito en base 10, b la base a la que se quiere convertir dicho numero y finalmente d el numero en base b, donde
1 |
d ={ d_m, d_m-1, ..., d_2, d_1, d_0 } |
y d_i son los digitos que conforman a cada numero, se cumple que:
1 |
N = sum_{i=0}^m d_i * b^m |
Por lo tanto, los dígitos se pueden ir despejando. Con un algoritmo recursivo se puede obtener:
1 2 3 4 5 6 7 |
String cambioBase(int n, int b){ if(n==0){ return ""; }else{ return cambioBase(n/b,b)+" "+(n%b); } } |
El proceso inverso se puede hacer mediante la sumatoria que esta en la parte de arriba.
Conversión de bases numéricas en Java y la clase String
Java nos permite convertir de base mediante la clase String, si le damos una cadena con números y letras tomará los dígitos con su respectivo valor y a la letra a le asignara 10, a la b 11, a la c 12 y así sucesivamente. Sólo soporta cambios hasta la base 36. Para convertir una variable entera a una cadena en base b, se utiliza el método toString de la clase Integer, que como parámetros recibe el número n y la base b.
1 2 3 4 |
int x = 384739; for(int i=2;i<=36;i++){ System.out.println("" + x + " en base "+i+" es "+Integer.toString(x,i)); } |
Al ejecutarlo obtenemos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
384739 en base 2 es 1011101111011100011 384739 en base 3 es 201112202121 384739 en base 4 es 1131323203 384739 en base 5 es 44302424 384739 en base 6 es 12125111 384739 en base 7 es 3161455 384739 en base 8 es 1357343 384739 en base 9 es 645677 384739 en base 10 es 384739 384739 en base 11 es 243073 384739 en base 12 es 166797 384739 en base 13 es 106174 384739 en base 14 es a02d5 384739 en base 15 es 78ee4 384739 en base 16 es 5dee3 384739 en base 17 es 4a54c 384739 en base 18 es 3bh87 384739 en base 19 es 2i1e8 384739 en base 20 es 281gj 384739 en base 21 es 1kb8j 384739 en base 22 es 1e2k3 384739 en base 23 es 18e6i 384739 en base 24 es 13jmj 384739 en base 25 es ofee 384739 en base 26 es ln3h 384739 en base 27 es jekg 384739 en base 28 es hekj 384739 en base 29 es fmdp 384739 en base 30 es e7ej 384739 en base 31 es csat 384739 en base 32 es bnn3 384739 en base 33 es an9p 384739 en base 34 es 9qrt 384739 en base 35 es 8y2j 384739 en base 36 es 88v7 |
Conversión de bases numéricas en Java con la clase Integer
Por último, si queremos convertir una cadena en base b a una variable entera, se hace con el método parseInt de la clase Integer, como parámetros se envían la cadena y la base del número.
1 2 3 4 |
String y = "111111"; for(int i=2;i<=36;i++){ System.out.println(y + " de base " + i + " a base 10 es " + Integer.parseInt(y,i)); } |
resultando en :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
111111 de base 2 a base 10 es 63 111111 de base 3 a base 10 es 364 111111 de base 4 a base 10 es 1365 111111 de base 5 a base 10 es 3906 111111 de base 6 a base 10 es 9331 111111 de base 7 a base 10 es 19608 111111 de base 8 a base 10 es 37449 111111 de base 9 a base 10 es 66430 111111 de base 10 a base 10 es 111111 111111 de base 11 a base 10 es 177156 111111 de base 12 a base 10 es 271453 111111 de base 13 a base 10 es 402234 111111 de base 14 a base 10 es 579195 111111 de base 15 a base 10 es 813616 111111 de base 16 a base 10 es 1118481 111111 de base 17 a base 10 es 1508598 111111 de base 18 a base 10 es 2000719 111111 de base 19 a base 10 es 2613660 111111 de base 20 a base 10 es 3368421 111111 de base 21 a base 10 es 4288306 111111 de base 22 a base 10 es 5399043 111111 de base 23 a base 10 es 6728904 111111 de base 24 a base 10 es 8308825 111111 de base 25 a base 10 es 10172526 111111 de base 26 a base 10 es 12356631 111111 de base 27 a base 10 es 14900788 111111 de base 28 a base 10 es 17847789 111111 de base 29 a base 10 es 21243690 111111 de base 30 a base 10 es 25137931 111111 de base 31 a base 10 es 29583456 111111 de base 32 a base 10 es 34636833 111111 de base 33 a base 10 es 40358374 111111 de base 34 a base 10 es 46812255 111111 de base 35 a base 10 es 54066636 111111 de base 36 a base 10 es 62193781 |