简单的事情,如何打印二进制数并将其移到左边?
$num = 0b00000010001;
for(0..6){
print sprintf ("%b",$num), "\n";
$num<<1;
}
此代码的问题:它不会在1之前打印0!印刷品的回复只是&#34; 10001&#34;,它并没有改变数字。
最终输出应为:
00000010001
00000100010
00001000100
00010001000
00100010000
01000100000
10001000000
答案 0 :(得分:10)
告诉格式化板在任何情况下都需要准确打印N(11)位数,并且0
应该用作填充符号:
my $num = 0b00000010001;
for (0..6) {
printf("%011b\n", $num);
$num <<= 1;
}
这里有两个旁注
首先,print sprintf
明显多余:printf
会很好地取代它。
其次,在原始代码中,您忘记将结果转移回$num
。如果您使用use warnings
编译指示启动了脚本(就像在我的演示中一样),您已通过Useless use of left bitshift (<<) in void context...