Python

[Python] 2진수, 8진수, 16진수 다루기

shur_ 2025. 2. 6. 19:51

🚩각 진수 표현

  • 2진수 : 0b
  • 8진수 : 0o
  • 16진수 : 0x
42 == 0b101010 #True
42 == 0o52 #True
42 == 0x2a #True

 

 

해당 진수에서 허용하는 범위를 벗어난 값을 사용하면 SyntaxError 발생.

>>> 0b2
  File "<stdin>", line 1
    0b2
     ^
SyntaxError: invalid token

 

 

🚩숫자에서 다른 진수 문자열로 변환하기

파이썬은 bin(), oct(), hex() 내장 함수를 지원함.

이 함수들을 통해서 십진수 숫자를 다른 진수의 문자열 표현으로 변환 가능.

 

>>> bin(42)
'0b101010'
>>> oct(42)
'0o52'
>>> hex(42)
'0x2a'

 

함수의 인자로 숫자를 넘길 때 십진수, 2진수, 8진수, 16진수 표현법만 지키면 뭐든 가능.

같은 값을 다른 진수의 표현 방식으로 나타낸 것이기 때문.

 

>>> bin(0b101010)
'0b101010'
>>> oct(0b101010)
'0o52'
>>> hex(0b101010)
'0x2a'
>>> str(0b101010)
'42'

 

 

🚩다른 진수의 문자열을 숫자형으로 변환하기

 

int() 함수에 다른 진수의 값을 추가 인자로 제공.

>>> int('0b101010', 2)
42
>>> int('0o52', 8)
42
>>> int('0x2a', 16)
42

 

 

int() 함수의 기본 인자 값이 10이기 때문에 평소 int()를 사용하면 10진수 정수로 변환됨.

>>> int('42', 10)
42
>>> int('42')
42

 

 

🚩 format() 활용하기

>>> format(42, 'b')
'101010'
>>> format(42, 'o')
'52'
>>> format(42, 'x')
'2a'
>>> format(42, 'X')
'2A'
>>> format(42, 'd')
'42'

 

 

변환 문자열 앞에 접두어 붙이기

>>> format(42, '#b')
'0b101010'
>>> format(42, '#o')
'0o52'
>>> format(42, '#x')
'0x2a'
>>> format(42, '#X')
'0X2A'

 

 

>>> "int: {0:d}, bin: {0:b}, oct: {0:o}, hex: {0:x}".format(42)
'int: 42, oct: 52, bin: 101010, hex: 2a'

>>>f"int: {42:d}, bin: {42:b}, oct: {42:o}, hex: {42:x}"
'int: 42, oct: 52, bin: 101010, hex: 2a'