如何将二进制数转移到左侧

PYP*_*YPL 3 binary perl shift

简单的事情,如何打印二进制数并将其转移到左侧?

$num = 0b00000010001;
for(0..6){
    print sprintf ("%b",$num), "\n";
    $num<<1;
}
Run Code Online (Sandbox Code Playgroud)

这段代码的问题:它不会在1之前打印0!打印的重新打印只是"10001",它不会改变数字.

最终的输出应该是:

00000010001
00000100010
00001000100
00010001000
00100010000
01000100000
10001000000
Run Code Online (Sandbox Code Playgroud)

rai*_*7ow 10

只需告诉格式化程序在任何情况下都需要准确打印N(11)位数,并且0应该用作填充符号:

my $num = 0b00000010001;
for (0..6) {
    printf("%011b\n", $num);
    $num <<= 1;
}
Run Code Online (Sandbox Code Playgroud)

演示.

这里有两个旁注

  • 首先,它显然是多余的print sprintf:printf将很好地替换它.

  • 其次,在原始代码中,您忘记将转移的结果分配给$num.如果你用use warningspragma 开始你的脚本(比如在我的演示中),你会收到通知Useless use of left bitshift (<<) in void context...

  • 好答案.你还可以提一下,"使用警告"会提供有关转移错误的信息:`在void上下文中无用的使用left bitshift(<<) (2认同)
  • 没错.我自动将它们添加到演示脚本中,但忘记在答案中提及.) 谢谢. (2认同)