in reply to decimal to binary

Maybe you don't understand why I don't use pack/unpack... Only for illustrate the well known TIMTOWTDI :)
sub to_bin { my $num = shift; my $size = 0; my @result; while( $num >> $size ) { $size ++;} for (0..$size-1) { unshift @result , ( ($num & ( 2 ** $_ ) ) ? "1" : "0" ); } return join '' , @result ; }

Replies are listed 'Best First'.
Re: Re: decimal to binary
by Gloom (Monk) on Jan 25, 2001 at 01:04 UTC
    I'm working on it and I have found shortest way to do that
    sub to_bin { my( $num , $len ) = ( shift , 0 ); while( $num >> $len ){ $len++ ;} return reverse map {( $num & 1 << $_ ) ? "1" : "0";}(0..$len-1); }
    did someone can do better ? ( I'm sure you can, I trust in you ;)
      Another WTDI.

      A one liner (I'm no true obfuscator):
      perl -ne 'undef@_;while($_){$_[0]=($_&1&&1||0).$_[0];$_>>=1}print"@_\n"'

      Or a more sensible sub version with the same logic.

      sub to_bin { my $num = shift; my $ret = ''; while ($num) { $ret = (($num % 2) ? 0 : 1) . $ret; $num >>= 1; } return $ret; }