3장 연습 문제 13번

마지막 문제는 임의의 정수를 2진법 수로 변환 하는 것이다.

8진법이나 16진법의 변환은 함수로 이미 있지만 2진법의 변환은 함수가 없다.

그래서 직접 작성해야 하는데, 10진법 수를 2진법으로 변환하는 가장 간단한 방법은 2로 나누는 것이다.

초등학교인지 중학교인지는 잘 모르지만 그 당시에 2진법으로 변환하는 방법을 배운다.

10진법 수를 2로 계속 나눠서 나온 나머지들을 역순으로 나열하면 된다.

예를 들면 아래와 같이 연산하며 10 은 1010 이 된다.

2 | 10   - 0                    
   ㅡㅡ
  |  5   - 1
   ㅡㅡ
  |  2   - 0
   ㅡㅡ
     1

이를 코딩해 보면
import sys

def cal(a) :
   b = ''
   while a > 0 :
       b = str(a%2) + b
       a//=2
   return b

a = input('Intger : ')

if a > 0 :
   print cal(a)
elif a == 0 : print '0'
else :
   print '1' + cal(a & sys.maxint)
이 처럼 작성 해볼 수 있는데, 양수는 그대로 대입해보면 되지만 음수의 경우 2의 보수를 취하기 때문에 계산이 조금 다르다.

그래서 사용한 방법이 MSB 를 제외한 31자리 비트만을 추출(?) 한 다음 앞에다가 1만 연결시켰다.

추출한 방법은 앞의 문제와 같은 방법으로 1로만 31개로 이루어진 maxint 값과 & 연산을 했다.

댓글 2개:

  1. 파이썬을 어제부터 공부하게된 학생입니다. 너무 기본적인 질문일꺼같지만 궁금해서 여쭤봅니다.
    1. b=' '이부분은 무엇을 뜻하는지 궁금합니다
    2. str을 이용해 문자형으로 바꾸는 이유가 궁금합니다.

    답글삭제
  2. 1번은 뒷부분공부하니 나오는군요 공문자열이라고요 2번만 부탁드립니다.

    답글삭제