이 번 포스팅에서는 파이썬에서 진수를 다루는 여러가지 방법에 대해서 알아보겠습니다. 파이썬에서는 기본적으로 10진수 형태로 숫자를 표현하기 때문에 다른 진수의 형태로 숫자를 표현하려면 다음과 같이 숫자 앞에 접두어를 붙여줘야 합니다. >>> 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' 함수의 인자로 숫자를 넘길 때, 10진수를 사용하든 2진수를 사용하든 결국 동일한 숫자 값을 다른 진수의 형태로 표현한 것뿐이기 때문에 결과는 동일해야 합니다. >>> bin(0b101010) '0b101010' >>> oct(0b101010) '0o52' >>> hex(0b101010) '0x2a' >>> str(0b101010) '42' 다른 진수의 문자열을 숫자형으로 변환하기bin(), oct(), hex()로 변환한 문자열들을 어떻게 다시 숫자로 변환할 수 있을까요? 평소에 문자열을 숫자로 바꾸기 위해서 자주 사용하시던 int() 함수에 진수의 base 값을 추가 인자로 넘겨주시면 됩니다. >>> int('0b101010', 2) 42 >>> int('0o52', 8) 42 >>> int('0x2a', 16) 사실 int() 함수의 2번째 인자는 디폴트값이 10이기 때문에 생략했을 경우 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' 문자열 포멧터를 이용해서 10진수, 2진수, 8진수, 16진수를 한 줄의 문자열로 변환한 예제입니다. >>> "int: {0:d}, bin: {0:b}, oct: {0:o}, hex: {0:x}".format(42) 'int: 42, oct: 52, bin: 101010, hex: 2a' 이상으로 파이썬에서 진수를 다루는 여러가지 방법에 대해서 알아보았습니다. 참고
|