jueves, 12 de septiembre de 2013

Decimal a binario en PHP

Otro de los algoritmos más famosos por la comunidad de programadores es pasar un número entero positivo al sistema binario ( es decir, a 0 y a 1), que es el "lenguaje" que entienden nuestros aparatos eléctricos, domésticos y ordenadores entre otros.

Por ejemplo, para pasar el número decimal 100 a binario, únicamente tenemos que ir dividendo entre 2 y el resultado volverlo a dividir hasta que sea 1. Después de derecha a izquierda, cogemos todos los restos y los ordenamos. Aquí tenéis un ejemplo.
Conversion.JPG

Una de las posibles soluciones ( y la más complicada) es este ejemplo, dónde para solucionar el algoritmo hay que crear dos bucles y un array que almacene los restos de las divisiones.

<?php
/* Creamos la variable dividendo y la mostramos por pantalla */
$dividendo=64;
echo 'El numero en decimal es: '.$dividendo;
/*Creamos la funcion con un bucle while*/

function binario($dividendo)
{
	$resultadoRestos=array(); /*Creamos un array para ir almacenando los restos*/
	while ($dividendo > 0)
	{
		$resultado=$dividendo/2; /*Calculamos el resultado*/
		$resto=$dividendo%2; /*Calculamos el resto de la division*/
		$resultadoRestos[]=$resto; /*Almacenamos el resto*/
		$dividendo=intval($resultado); /*Asignamos el numero entero resultante a la  variable dividendo de nuevo*/
	}
	/*Ordenamos el array por el indice descendente y creamos un bucle foreach para mostrar el valor*/
	krsort($resultadoRestos); 
	foreach ($resultadoRestos as $clave => $valor) 
	{ 
		echo $valor; /*Imprimimos el valor*/
	} 
}

/* LLamamos a la función y la mostramos por pantalla */

echo ' y en binario es: ';
$binarios=binario($dividendo);
?>

Y la siguiente solución (muchísimo más correcta y con menos código) utilizando la función de PHP decbin.

<?php
/* Creamos la variable $numero y la mostramos por pantalla */

$numero=5;
echo 'El numero en decimal es: '.$numero;

/*Ahora creamos la variable $binario con la función de PHP decbin y la mostramos*/

$binario=decbin($numero);
echo ' y en binario es: '.$binario;
?>

Por último, si queremos pasar un número binario a decimal lo más sencillo sería usar la función de PHP bindec, que nos ahorrará mucho tiempo!

2 comentarios: