#!perl use warnings; use strict; # arithmetic operations on (nonegative) binary numbers sub addbin0 { my($a,$b) = @_; $a || $b ? ( chop($a) ? (chop($b) ? addbin1($a, $b) . "0" : addbin0($a, $b) . "1") : (chop($b) ? addbin0($a, $b) . "1" : addbin0($a, $b) . "0") ) : ""; } sub addbin1 { my($a,$b) = @_; $a || $b ? ( chop($a) ? (chop($b) ? addbin1($a, $b) . "1" : addbin1($a, $b) . "0") : (chop($b) ? addbin1($a, $b) . "0" : addbin0($a, $b) . "1") ) : "1"; } sub addbin { addbin0(@_) || "0"; } # multiplication algorithm to convert decimal number to binary our @dec2bin1 = qw(0 1 10 11 100 101 110 111 1000 1001); sub dec2bin { $_[0]=~/^\s*(-?)(\d+)/ or do { warn "dec2bin can not interpret its first argument as +decimal"; return "0"; }; my($sgn, $dec) = ($1, $2); $dec=~/(\d)/g or die "internal error"; # this regexp always ma +tches my $b = $dec2bin1[$1]; while($dec=~/(\d)/g) { $b = addbin($b . "0", $b . "000"); # multiply by 1010b $b = addbin($b, $dec2bin1[$1]); } $sgn . $b; } # convert a number print dec2bin($ARGV[0]), "\n"; __END__
Update: changed sub dec2bin above by merlyn's suggestion. Well, it still doesn't check for nonnumeric junk at the end of string, sorry.
Original sub:
# multiplication algorithm to convert decimal number to binary our @dec2bin1 = qw(0 1 10 11 100 101 110 111 1000 1001); sub dec2bin { $_[0]=~/^(-?)(\d*)/; my($sgn, $dec) = ($1, $2); $dec=~/(\d)/g; my $b = $dec2bin1[$1]; while($dec=~/(\d)/g) { $b = addbin($b . "0", $b . "000"); # multiply by 1010b $b = addbin($b, $dec2bin1[$1]); } $sgn . $b; }
In reply to Re: decimal to binary conversion need help
by ambrus
in thread decimal to binary conversion need help
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |