java

Java – Convertir Binario a Decimal (algoritmo)

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.

Binario a decimal: método fácil

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.

Algoritmo para convertir binario a decimal

Explicación del algoritmo

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.

Código fuente

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.

Probar conversión binaria a decimal

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.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

12 horas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

7 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

7 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

7 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

7 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

7 días hace

Esta web usa cookies.