web-dev-qa-db-ja.com

Perlで10進数を2進数に変換するにはどうすればよいですか?

Perlで10進数やテキストを2進数に変換するプログラムを作ろうとしています。プログラムは、文字または文字列のユーザー入力を要求し、その結果をコンソールに出力します。どうすればよいですか?私が取り組んできたコードは以下のとおりですが、修正できないようです。

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;
}
13
David

$decimal/2;$decimalに影響を与えていません

おそらく$decimal /= 2;が必要です。または、クールになりたい場合は、$decimal >>= 1;が必要です。

しかし、本当に、本当に、あなたはおそらくただ欲しいだけです:

printf "%b\n", $decimal;

25
David M

10進数から2進数への変換には、これを試してください。

my $bin = sprintf ("%b", $dec);

各ビットを取得するには:

my @bits = split(//, $bin);

次に、各ビットを操作したり、MSBインデックスを変更したりできます。

10
user2461880

コマンドラインですばやく変換するために、。bash_profileに次のエイリアスがあります。

# from-decimal
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 )'"
# from-hex
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 )'"
# from-octal
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 )'"
# from-binary
alias b2h="Perl -e 'printf qq|%X\n|, oct( q|0b| . shift )'"
alias b2d="Perl -e 'printf qq|%d\n|, oct( q|0b| . shift )'"
alias b2o="Perl -e 'printf qq|%o\n|, oct( q|0b| . shift )'"
8
brian d foy

perlfaq4数値表現/基数/基数間で変換するにはどうすればよいですか? )にリストされている10進数から2進数に変換する方法がいくつかあります。

sprintf は良い選択です。

8
toolic
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)))'"
0
roli
#!/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";
0
manmathesh

私はこのコードを使用して10進数を2進数に変換しました。

print "Enter a number to convert: ";
chomp($decimal = <STDIN>);
print "\nConverting $number to binary...\n";
$ans=0;$i=1;
while($decimal > 0)
{
    $remainder = $decimal%2;
    $ans=$ans+$remainder*$i;
    $i=$i*10;
    $decimal >>= 1
}
print $ans
0
Jane