关于算法:如何在Perl中将十进制数字转换为二进制?

How do I convert decimal numbers to binary in Perl?

我正在尝试制作一个在Perl中将十进制数字或文本转换为二进制数字的程序。该程序要求用户输入字符或字符串,然后将结果打印到控制台。我该怎么做呢?我一直在处理的代码如下,但似乎无法修复。

1
2
3
4
5
6
7
8
9
10
11
print"Enter a number to convert:";
chomp($decimal = <STDIN>);
print"\
Converting $number to binary...\
"
;
$remainder = $decimal%2;
while($decimal > 0)
{
    $decimal/2;
    print $remainder;
}

$decimal/2;不会影响$decimal

您可能想要$decimal /= 2;,或者如果您想变酷,请$decimal >>= 1;

但是真的,真的,您可能只想要:

printf"%b\
", $decimal;


尝试此操作以进行十进制到二进制的转换:

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

获取每个位:

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

然后,您可以操纵每个位,更改MSB索引等。


我在.bash_profile中具有这些别名,以便在命令行上进行快速转换:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# from-decimal
alias d2h="perl -e 'printf qq|%X\
|, int( shift )'"

alias d2o="perl -e 'printf qq|%o\
|, int( shift )'"

alias d2b="perl -e 'printf qq|%b\
|, int( shift )'"

# from-hex
alias h2d="perl -e 'printf qq|%d\
|, hex( shift )'"

alias h2o="perl -e 'printf qq|%o\
|, hex( shift )'"

alias h2b="perl -e 'printf qq|%b\
|, hex( shift )'"

# from-octal
alias o2h="perl -e 'printf qq|%X\
|, oct( shift )'"

alias o2d="perl -e 'printf qq|%d\
|, oct( shift )'"

alias o2b="perl -e 'printf qq|%b\
|, oct( shift )'"

# from-binary
alias b2h="perl -e 'printf qq|%X\
|, oct( q|0b| . shift )'"

alias b2d="perl -e 'printf qq|%d\
|, oct( q|0b| . shift )'"

alias b2o="perl -e 'printf qq|%o\
|, oct( q|0b| . shift )'"


perlfaq4中列出了几种将十进制转换为二进制的方法
(如何在数字表示形式/基数/基数之间转换?)。

sprintf是一个不错的选择。


我使用此代码将十进制转换为二进制,希望对您有所帮助:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
print"Enter a number to convert:";
chomp($decimal = <STDIN>);
print"\
Converting $number to binary...\
"
;
$ans=0;$i=1;
while($decimal > 0)
{
    $remainder = $decimal%2;
    $ans=$ans+$remainder*$i;
    $i=$i*10;
    $decimal >>= 1
}
print $ans

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/perl
use strict;
print"Enter a number to convert:";
chomp(my $decimal = <STDIN>);

print"\
Converting $decimal to binary...\
"
;

my @array;
my $num;

while($decimal >= 1)
{
    if($decimal == 1) {

        $num .= 1;
        last;
    }

    my $remainder = $decimal%2;
    $num .= $remainder;
    $decimal = $decimal/2;
}

print $num."\
"
;

1
2
3
4
5
6
alias b2d="perl -e 'printf qq|%d\
|, unpack("
N", pack("B32", substr("0" x 32 . 1101 , -32)))'"
alias b2h="perl -e 'printf qq|%X\
|, unpack("
N", pack("B32", substr("0" x 32 . 1101 , -32)))'"
alias b2o="perl -e 'printf qq|%o\
|, unpack("
N", pack("B32", substr("0" x 32 . 1101 , -32)))'"

请尝试以下代码。它将起作用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl

use strict;

print"Enter a decimal number \
"
;

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,"\
"
;