더북(TheBook)

binary.py에서 v는 현재 테스트하는 추의 무게, n은 물체의 초과 무게(저울에 추를 올려놓는 것을 시뮬레이션하기 위해 그저 n에서 추의 무게를 뺄 뿐이다. 저울에서는 물체가 추보다 무겁거나 가볍다는 사실만 알 뿐, 얼마나 무거운지는 알 수 없다)이다. v의 값은 매번 2배씩 감소한다. vn보다 크면 0을 출력하고, 그렇지 않으면 1을 출력하고 n에서 v를 뺀다. 이 코드도 마찬가지로 트레이스(루프를 반복할 때마다의 n, v, n < v의 값과 출력 비트)를 살펴보면 프로그램을 이해하는 데 도움이 된다. [표 1.3.5]의 가장 오른쪽 열을 위에서부터 읽으면 10011로서 19를 이진수로 표현한 것이다.

프로그램 1.3.7 이진수로 변환 (binary.py)

import sys
import stdio
 
n = int(sys.argv[1])
 
# n보다 작거나 같은 수중 가장 큰 2의 거듭제곱수 v 계산
v = 1
while v <= n // 2:
    v *= 2 
 
# v를 반으로 줄이면서 루프를 반복한다.
while v > 0:
    if n < v:
        stdio.write(0)
    else:
        stdio.write(1)
        n -= v
    v //= 2 
 
stdio.writeln()
v
n
현재 2의 거듭제곱수
현재 초과수

이 프로그램은 명령 줄 인수로 받은 양의 정수를 높은 자리부터 한 자리씩 내려가면서 이진수로 출력한다.

% python3 binary.py 19
10011
% python3 binary.py 255
11111111
% python3 binary.py 512
1000000000
% python3 binary.py 100000000
101111101011110000100000000
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.