如何在Perl中将十进制数转换为二进制?

Dav*_*vid 13 algorithm binary perl 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;
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*d M 25

$decimal/2; 没有影响 $decimal

你可能想要$decimal /= 2;或者如果你想变得冷静的话$decimal >>= 1;

但实际上,你可能只想要:

printf "%b\n", $decimal;

  • `/ =`是除法赋值,换句话说`$ decimal/= 2`相当于`$ decimal = $ decimal/2`.`printf`是一种格式化的打印功能.如果您真的对编程感到陌生并且对您不熟悉,我强烈建议您购买一本关于Perl的书籍,而不是仅仅依靠向互联网提问. (3认同)
  • @David如果使用`printf`行,则根本不需要循环.`printf`行完成将数字转换为二进制表示然后打印的完整工作.尝试在Perl上找到介绍性文本.你不会通过复制粘贴你不熟悉的其他人的代码而走得很远. (3认同)

小智 11

尝试使用十进制到二进制转换:

my $bin = sprintf ("%b", $dec);
Run Code Online (Sandbox Code Playgroud)

得到每一点:

my @bits = split(//, $bin);
Run Code Online (Sandbox Code Playgroud)

然后你可以操纵每个位,改变MSB索引等等.

  • 对于前导零,假设总共有 8 位数字,请使用 `my $bin = sprintf ("%.8b", $dec);`。示例:`00000001` (2认同)

too*_*lic 8

有几种方法可以从perlfaq4中列出的十进制转换为二进制 (如何在数字表示/基数/基数之间进行转换?).

sprintf是个不错的选择.


bri*_*foy 8

我在.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 )'"
Run Code Online (Sandbox Code Playgroud)