public class Conversor {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
int opc = 0;
while (opc != 3) {
System.out.println("\n\n[1] -- Convertir de decimal a binario");
System.out.println("[2] -- Convertir de binario a decimal");
System.out.println("[3] -- FIN DE PROGRAMA");
System.out.print("Elija opcion: ");
opc = teclado.nextInt();
switch(opc) {
case 1:
System.out.print("\nIntroduzca número decimal: ");
int decimal = teclado.nextInt();
System.out.println("Equivalente binario: " + decimalABinario(decimal));
break;
case 2:
System.out.print("\nIntroduzca número binario: ");
int binario = teclado.nextInt();
System.out.println("Equivalente decimal: " + binarioADecimal(binario));
break;
case 3:
System.out.println("\n\n\tFIN DE PROGRAMA");
break;
default:
System.out.println("Opcion desconocida");
}
}
teclado.close();
}
/**
* Convierte un número decimal en su equivalente binario
* @param dec Número en base decimal
* @return Mismo valor en base binaria
* @see <a href="http://recursostic.educacion.es/secundaria/edad/4esotecnologia/quincena5/4q2_contenidos_2c.htm">
* De Decimal a Binario</a>
*/
static int decimalABinario(int dec) {
/*
* Para convertir de decimal a binario
* hay que hacer sucesivas divisiones entre 2
* y guardar el resto (que será 0 ó 1 ).
* Cuando el número decimal quede reducido a
* valor 1 ó 0, se termina el proceso y se guarda
* también este valor.
* Entonces tenemos una secuencia de 0 y 1, que
* si invertimos su orden, obtenemos el número
* binario equivalente.
*/
//Iremos construyendo un String con los valores que guardamos
StringBuilder bin = new StringBuilder();
while (dec > 1) {
bin.append(dec % 2); //Guardamos el resto, con el operador módulo
dec /= 2; //Dividimos el valor decimal. Todo esto se repite hasta que valga 1 ó 0
}
bin.append(dec); //Recogemos el último valor, el cociente de la última división
//Si invertimos el String construido, tenemos el equivalente binario
return Integer.parseInt(bin.reverse().toString());
}
/**
* Transforma un número binario en su equivalente decimal.
* @param bin Valor en base binaria
* @return Mismo valor en base decimal
* @see <a href="http://recursostic.educacion.es/secundaria/edad/4esotecnologia/quincena5/4q2_contenidos_2b.htm">
* De binario a decimal</a>
*/
static int binarioADecimal(int bin) {
int expon = 0;
int decimal = 0;
while (bin > 0) {
//Cogemos última cifra del número binario, haciendo modulo 10
int cifra = bin % 10;
//Multiplicamos por la potencia de 2 que corresponde, y acumulamos en el valor decimal
decimal += cifra * (int) Math.pow(2, expon);
//Incrementamos exponente para la próxima cifra
expon++;
//Eliminamos la cifra actual con la que ya hemos potenciado, haciendo división por 10
bin /= 10;
}
return decimal;
}
}