En este artículo explicaré 2 maneras de convertir un número binario a un número decimal en Java; es decir, convertir de base 2 (binario) a base 10 (decimal).
El primer método es recorriendo la cadena y haciendo las operaciones que se harían manualmente; o sea que lleva más trabajo.
La segunda manera indica cómo usar un método que ya viene en la API de Java listo para convertir binario a decimal sin esfuerzo. Veremos ambas.
Como lo dije, ya existe un método en Java que hace esto. Como queremos una gran precisión usamos el tipo de dato long para convertir números binarios aunque sean grandes.
La clase Long tiene un método estático llamado parseLong
que recibe una cadena y la base de dicha cadena. Basta con llamarlo y pasarle el número binario con la base, que es 2.
Aquí la sintaxis:
long numeroDecimal = Long.parseLong(numeroBinarioComoCadena, 2);
Al final veremos algunos ejemplos.
El segundo método es un algoritmo más desarrollado. Recorremos el número binario dígito por dígito, obteniendo un 1 o un 0.
Multiplicamos ese dígito por un multiplicador (qué redundancia, lo sé) que será el resultado de elevar el 2 a una potencia dada por el índice en el que vayamos.
Por ejemplo, el número final de la derecha tiene un multiplicador de 1, el penúltimo tiene uno de 2, el antepenúltimo uno de 4 y así sucesivamente.
Si el dígito es 0, al multiplicar seguirá siendo 0; pero si es 1, entonces será el valor que va en esa posición. Al final todo eso se suma en una variable y el resultado es el número decimal.
El código queda así:
public static long convertirBinarioADecimalManual(String binario) {
// A este número le vamos a sumar cada valor binario
long decimal = 0;
int posicion = 0;
// Recorrer la cadena...
for (int x = binario.length() - 1; x >= 0; x--) {
// Saber si es 1 o 0; primero asumimos que es 1 y abajo comprobamos
short digito = 1;
if (binario.charAt(x) == '0') {
digito = 0;
}
/*
Se multiplica el dígito por 2 elevado a la potencia
según la posición; comenzando en 0, luego 1 y así
sucesivamente
*/ double multiplicador = Math.pow(2, posicion);
decimal += digito * multiplicador;
posicion++;
}
return decimal;
}
De igual manera se utiliza un tipo de dato long para soportar números grandes.
Ahora veamos a los dos métodos expuestos en acción. He creado un código en donde se prueba a ambos y se imprime el valor que regresa cada uno. Aquí está:
/**
* 2 maneras de convertir números binarios a decimales en Java
*
* @author parzibyte
*/class Main {
public static void main(String[] args) {
String[] binarios = { "000000", // 0
"000001", // 1
"10", // 2
"101", // 5
"1111", // 15
"1111111111", // 1023
};
for (String binario : binarios) {
System.out.println("Convirtiendo binario a entero el número " + binario);
System.out.println("Manual: " + convertirBinarioADecimalManual(binario));
System.out.println("Usando funciones: " + convertirBinarioADecimal(binario));
}
}
public static long convertirBinarioADecimalManual(String binario) {
// A este número le vamos a sumar cada valor binario
long decimal = 0;
int posicion = 0;
// Recorrer la cadena...
for (int x = binario.length() - 1; x >= 0; x--) {
// Saber si es 1 o 0; primero asumimos que es 1 y abajo comprobamos
short digito = 1;
if (binario.charAt(x) == '0') {
digito = 0;
}
/*
* Se multiplica el dígito por 2 elevado a la potencia según la posición;
* comenzando en 0, luego 1 y así sucesivamente
*/ double multiplicador = Math.pow(2, posicion);
decimal += digito * multiplicador;
posicion++;
}
return decimal;
}
public static long convertirBinarioADecimal(String binario) {
return Long.parseLong(binario, 2);
}
}
Si quieres probar el código puedes descargarlo y probarlo en un IDE, te recomiendo NetBeans.
Lee más sobre Java en mi blog.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.