Ответ 1
$decimal/2;
не влияет на $decimal
Вероятно, вы хотите $decimal /= 2;
или хотите, чтобы вы были классны, а затем $decimal >>= 1;
Но на самом деле, вы, вероятно, просто хотите:
printf "%b\n", $decimal;
Я пытаюсь создать программу, которая преобразует десятичные числа или текст в двоичные числа в Perl. Программа запрашивает ввод пользователем символа или строки, а затем выводит результат на консоль. Как мне это сделать? Мой код, над которым я работал, ниже, но я не могу его исправить.
print "Enter a number to convert: ";
chomp($decimal = <STDIN>);
print "\nConverting $number to binary...\n";
$remainder = $decimal%2;
while($decimal > 0)
{
$decimal/2;
print $remainder;
}
$decimal/2;
не влияет на $decimal
Вероятно, вы хотите $decimal /= 2;
или хотите, чтобы вы были классны, а затем $decimal >>= 1;
Но на самом деле, вы, вероятно, просто хотите:
printf "%b\n", $decimal;
Попробуйте это для преобразования десятичного в двоичный:
my $bin = sprintf ("%b", $dec);
Чтобы получить каждый бит:
my @bits = split(//, $bin);
Затем вы можете манипулировать каждым битом, изменять индекс MSB и т.д.
Есть несколько методов для преобразования из десятичного в двоичный, перечисленных в perlfaq4 (Как преобразовать числовые представления/базы/радиксы?).
sprintf - хороший выбор.
У меня есть эти псевдонимы в моем .bash_profile для быстрых преобразований в командной строке:
alias d2h="perl -e 'printf qq|%X\n|, int( shift )'"
alias d2o="perl -e 'printf qq|%o\n|, int( shift )'"
alias d2b="perl -e 'printf qq|%b\n|, int( shift )'"
alias h2d="perl -e 'printf qq|%d\n|, hex( shift )'"
alias h2o="perl -e 'printf qq|%o\n|, hex( shift )'"
alias h2b="perl -e 'printf qq|%b\n|, hex( shift )'"
alias o2h="perl -e 'printf qq|%X\n|, oct( shift )'"
alias o2d="perl -e 'printf qq|%d\n|, oct( shift )'"
alias o2b="perl -e 'printf qq|%b\n|, oct( shift )'"
alias b2d="perl -e 'printf qq|%d\n|, unpack("N", pack("B32", substr("0" x 32 . 1101 , -32)))'"
alias b2h="perl -e 'printf qq|%X\n|, unpack("N", pack("B32", substr("0" x 32 . 1101 , -32)))'"
alias b2o="perl -e 'printf qq|%o\n|, unpack("N", pack("B32", substr("0" x 32 . 1101 , -32)))'"
#!/usr/bin/perl
use strict;
print "Enter a number to convert: ";
chomp(my $decimal = <STDIN>);
print "\nConverting $decimal to binary...\n";
my @array;
my $num;
while($decimal >= 1)
{
if($decimal == 1) {
$num .= 1;
last;
}
my $remainder = $decimal%2;
$num .= $remainder;
$decimal = $decimal/2;
}
print $num."\n";
Пожалуйста, попробуйте следующий код. Он будет работать.
#!/usr/bin/perl
use strict;
print "Enter a decimal number \n";
my $dec_number = <STDIN>;
chomp($dec_number);
my $reminder;
my $result;
while ($dec_number >= 1)
{
$reminder = $dec_number % 2; #Modulo division to get remainder
$result = $reminder . $result; #Concatenation of two numbers
$dec_number = $dec_number / 2; #New Value of decimal number to do next set of above operations
}
print "Binary number Output = ", $result, "\n";