티스토리 뷰

728x90
반응형

파이썬의 진법 표현

파이썬이 이진수(binary), 십진수(decimal), 16진수(hexadecimal)를 저장하고 표현하는 방법을 살펴보자. 먼저 이진수와 십진수는 다음과 같이 각각 bin()과 int()를 사용해서 서로 변환할 수 있다.

>>> bin(87)
'0b1010111'
>>> int('0b1010111', 2)
87

bin()을 사용하면 이진수가 문자형 0b1010111으로 리턴된다. 반면 int()을 사용하면, 문자형인 이진수가 십진수 숫자 정수형 87로 리턴된다. 이진수임을 의미하는 접두사(Prefix) 0b는 다음과 같이 생략도 가능하다.

>>> int('1010111', 2)
87

bin()을 사용해 변수에 값을 할당하면 다음과 같이 문자형이 된다.

>>> a = bin(87)
>>> a
'0b1010111'
>>> type(a)
<class 'str'> 

이처럼 0b1010111라는 문자가 된다. type()을 확인해보면 문자형 클래스임을 확인할 수 있다. 만약 이진수를 문자열로 처리하지 않고 그대로 대입하면, 다음과 같이 십진수 숫자형이 된다.

>>> b = 0b1010111
>>> b
87
>>> type(b)
<class 'int'>

이진수를 대입한 변수 b는 십진수 숫자 87이 되고, 더 이상 이진수로 처리되지 않는다. 심지어 다음과 같이 십진수 87과 ID도 같다.

>>> id(87)
4547371104
>>> b = 0b1010111
>>> b 
87
>>> id(b)
4547371104

따라서 이진수 0b1010111는 내부적으로 십진수 87로 변환되어 동일하게 처리된다고 볼 수 있다. 이진수를 표현하는 접두사는 0b인데, 그렇다면 16진수를 표현하는 접두사는 무엇일까? 16진수는 다음과 같이 0x로 시작한다.

>>> hex(87)
'0x57'
>>> c = 0x57
>>> c
87
>>> id(c)
4547371104

16진수는 bin() 대신 hex()로 변환할 수 있으며, 마찬가지로 문자열로 처리하지 않고 그대로 대입하면 87이라는 십진수가 된다. ID 또한 앞서 10진수, 2진수의 87과 동일하며, 따라서 16진수도 내부적으로는 십진수로 변환되어 동일하게 처리됨을 확인할 수 있다.



출처
파이썬 알고리즘 인터뷰 (글 : 박상길 그림 : 정진호) [책만]

728x90
반응형
댓글
반응형
250x250
글 보관함
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday
링크