Hola a todos, hoy os voy a explicar como podemos calcular un numero en diferentes bases.
Ya hemos visto algunos artículos sobre como pasar de una base a otra, pero hoy os traigo una función que podemos usar para pasar de una base a otra de manera muy sencilla.
Ten en cuenta, que solo es para bases menores que 10, por lo que para hexadecimal no valdría.
En el caso de que alguna de las bases no sean base 10, tendremos que pasarlo a base 10 y después a la deseada.
Esta es la función en cuestión:
/** * Convierte un numero de una base a otra * * @param numero Numero a convertir * @param basex Base del numero a convertir * @param basey Base a la que queremos convertir * @return numero en formato decimal */ public static int basexABaseY(long numero, int basex, int basey) { if (basex >= 2 && basex <= 10 && basey >= 2 && basey <= 10) { if (basex == 10 || basey == 10) { int decimal = 0; int digito; final long DIVISOR = basey; for (long i = numero, j = 0; i > 0; i /= DIVISOR, j++) { digito = (int) (i % DIVISOR); decimal += digito * Math.pow(basex, j); } return decimal; } else { // Lo paso a decimal int aDecimal = basexABaseY(numero, basex, 10); // Lo paso a la base deseada int numeroBaseY = basexABaseY(aDecimal, 10, basey); return numeroBaseY; } } else { return -1; } }
Puedes copiarla en tus proyectos.
Veamos algunos ejemplos:
public static void main(String[] args) { System.out.println(basexABaseY(10, 10, 2)); // 1010 System.out.println(basexABaseY(60, 10, 8)); // 74 System.out.println(basexABaseY(100000, 2, 10)); // 32 System.out.println(basexABaseY(12, 3, 2)); // 101 System.out.println(basexABaseY(10, 2, 8)); // 2 }
Este es el resultado:
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Deja una respuesta