2014-03-31 59 views
3

簡單的事情是如何打印一個二進制數字並將它移到左邊?如何將二進制數字左移

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

此代碼的問題:它不打印1之前的0!打印的結果只是「10001」,並沒有改變數字。

最終輸出應該是:

00000010001 
00000100010 
00001000100 
00010001000 
00100010000 
01000100000 
10001000000 
+4

'打印sprintf'更好寫作'printf'。 – TLP

+1

尼特:你正在做一個左移,而不是右移。 – ThisSuitIsBlackNot

+0

@ThisSuitIsBlackNot thx,甚至沒有通知 – PYPL

回答

10

只是告訴你需要打印在任何情況下確切的N(11)數字格式,並0應該被用來作爲填充符號:

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

Demo。這裏

  • 首先

    兩圖片的標題說明,這顯然是多餘的做print sprintfprintf將取代它相當不錯。

  • 其次,在原來的代碼中,你忘記了將結果轉換回$num。假如你開始與use warnings編譯腳本(如在我的演示),你就已經被告知它Useless use of left bitshift (<<) in void context...

+2

很好的答案。你也可以提到'使用警告'會給出有關錯誤轉移的信息:'在無效的情況下無用的左移bitshift(<<)' – TLP

+2

啊,是的。我將它們自動添加到演示文稿中,但忘了在答案中提到。 ) 謝謝。 – raina77ow

相關問題