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

时间:2014-03-31 15:22:45

标签: perl binary shift

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

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

此代码的问题:它不会在1之前打印0!印刷品的回复只是&#34; 10001&#34;,它并没有改变数字。

最终输出应为:

00000010001
00000100010
00001000100
00010001000
00100010000
01000100000
10001000000

1 个答案:

答案 0 :(得分:10)

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

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

Demo

这里有两个旁注

  • 首先,print sprintf明显多余:printf会很好地取代它。

  • 其次,在原始代码中,您忘记将结果转移回$num。如果您使用use warnings编译指示启动了脚本(就像在我的演示中一样),您已通过Useless use of left bitshift (<<) in void context...

  • 收到通知