in reply to int2bin

Nice code. Perl has some slick ways of doing this sort of thing. You may have set off a round of golf. My ungolfed way:

{ local $\ = $/; for (@ARGV) { $_ = unpack 'B*', pack 'N', $_; s/^(?:0{8})*([01]{8,})/$1/g; print; } }
Setting $\ makes newline after print happen. The pack unpack trick is at the heart of the method. The substitution trims zeros.

Update: majin, there is a limit of 32 bits. The substitution s/0{8}//g was meant to remove leading groups of eight zeros, but was incorrect, it will remove any group of eight zeros. Corrected in code. We match groups of eight zeros from the left end, then capture the rest, substituting the captured part.

After Compline,
Zaxo

Replies are listed 'Best First'.
Re: Re: int2bin
by majin (Acolyte) on Aug 11, 2002 at 17:47 UTC
    Is there a limit to you code... say after 8 digits will it stop? Or does it remove the zeroes in the front of the dgits? Update: well to remove the leading zeroes in my code the code has to be changed to a simpler version of its self:
    #!/usr/bin/perl print "Input number: "; $num = <>; chomp $num; $array[0] = $num % 2; while ($num > 1) { $num = int $num / 2; push(@array, $num % 2); } print "Binary: "; foreach(reverse @array) { print; } print "\n";
    this shall not add the leading zeroes to the left of the digits but now it shall not remain to be multiples of 8...