2014-03-31 3 views
3

간단한 것, 이진수를 인쇄하고 왼쪽으로 이동하는 방법은 무엇입니까?이진수를 왼쪽으로 이동하는 방법

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

이 코드의 문제점 : 0의 앞에 1이 인쇄되지 않습니다! 인쇄물의 재사용은 단지 "10001"이며 숫자를 이동시키지 않습니다.

00000010001 
00000100010 
00001000100 
00010001000 
00100010000 
01000100000 
10001000000 
+4

'인쇄 sprintf' 더 나은 기록'printf'에 대해 통지 된 것입니다. – TLP

+1

nit : 오른쪽 교대가 아니라 왼쪽 교대를하고 있습니다. – ThisSuitIsBlackNot

+0

@ThisSuitIsBlack 아니요, 고시하지 않았습니다. – PYPL

답변

10

그냥 당신이 어떤 경우에 정확히 N (11) 자리를 인쇄해야 포맷터에게, 그리고 0 것을는 패딩 상징으로 사용되어야한다 :

최종 출력해야

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

Demo. 여기

  • 먼저

    두 sidenotes, 그것은 print sprintf을 할 분명히 중복입니다 : printf 아주 잘 대체합니다.

  • 둘째, 원래 코드에서 전환 결과를 $num으로 지정하는 것을 잊어 버렸습니다. 당신이 (내 데모 같은) use warnings 프라그와 스크립트를 시작했다, 당신은 Useless use of left bitshift (<<) in void context...

+2

좋은 답변입니다. '경고문을 사용하면'변하는 실수에 대한 정보를 얻을 수 있다고 언급 할 수 있습니다.'무효 상황에서 왼쪽 비트 시프트 (<<)를 쓸모 없게 사용합니다 .' – TLP

+2

아, 네. 자동으로 데모 스크립트에 추가했지만 대답은 언급하지 않았습니다.) 감사. – raina77ow

관련 문제