to binary and back


Conversor de decimal a binario y viceversa
El próposito de este código es puramente educativo. Toma un número de argv[1] y lo convierte a binario separando la parte entera de la parte decimal. La parte entera se convierte a binario dividiendo sucesivamente por 2 y tomando los restos. La parte decimal, multiplicando por dos. Para volver a convertir a decimal, lee la posición del bit y eleva 2 a la potencia del número de posición o su negativo en el caso decimal. Se deja a ejercicio del lector realizarlo en hexadecimal.



#!/usr/local/bin/perl -w $n = $ARGV[0]; if ($n+0 ne $n) { die "Not a number"; } if ($n<0) { $n = abs ($n); $flag="-"; }else {$flag = ""; } $i = int($n); $j = $n-$i; for (;;){ push @ii, $i%2; $i = int($i/2); if ($i<=1){ push @ii, "$i"; last; } } @ii=reverse(@ii); for (;;){ $j *=2; if ($j>=1) { push @jj, "1"; } else { push @jj, "0"; } $j -= int($j); if ($j==0) { last; } } $str= $flag."@ii"."."."@jj"; $str =~ s/ //g; print "$str\n"; $str =~ s/(\d+)\.(\d+)/$1\.$2/; $a=$1; $b=$2; for $i (0..length($a)-1){ $num += (2**$i)*substr($a,-1,1,""); } for $j (1..length($b)){ $num += (2**(-$j))*substr($b,0,1,""); } if ($flag eq "-") { $num *=-1; } print "$num\n"; __END__


Back