2진수 / 8진수 / 16진수 표현
- 앞에 접두어를 붙여 구분한다
- 2진수 : 0b
- 8진수 : 0o
- 16진수 : 0x
print(42==0b101010)
#결과
True
숫자 10진수 → 2진수 / 8진수 / 16진수 변환
- 파이썬 내장함수 사용
- 접두어가 붙은 문자열로 변환됨
- 2진수: bin()
- 8진수: oct()
- 16진수: hex()
print(bin(42))
print(oct(42))
print(hex(42))
#결과
'0b101010'
'0o52'
'0x2a'
format() 함수 사용: 2진수/ 8진수/ 16진수 변환
- 접두어를 제외한 값 변환
- 접두어 표시하려면 # 붙여주면 됨
- 문자열 길이를 고정하고 싶을 때는 앞에 길이 써주면 됨
- 2진수 : format(숫자, 'b')
- 8진수 : format(숫자, 'o')
- 16진수 : format(숫자, 'x')
print(format(42,'b'))
print(format(42,'o'))
print(format(42,'x'))
print(format(42,'X'))
print(format(42,'d'))
#접두사 붙여서 출력
print(format(42,'#x'))
#길이 지정 출력
print(format(42,'8b'))
#결과
101010
52
2a
2A
42
0x2a
101010
print("int: {0:d}, bin: {0:b}, oct: {0:o}, hex: {0:x}".format(42))
#결과
int: 42, bin: 101010, oct: 52, hex: 2a
N진수 → 10진수 변환
- int('문자열' , N)
- 기존에 사용하던 int() 에는 n=10이 생략되어 있던 것(10진수)
print(int('0b101010',2))
print(int('0o52',8))
print(int('0x2a',16))
#결과
42
42
42
참고링크: https://ko.wikihow.com/%EC%9D%B4%EC%A7%84%EC%88%98%EB%A5%BC-%EC%8B%AD%EC%A7%84%EC%88%98%EB%A1%9C-%EB%B3%80%ED%99%98%ED%95%98%EB%8A%94-%EB%B2%95
10진수 → N진수 변환
- int 같은 함수가 없기 때문에 코드작성이 필요하다
- divod( a, b ) : 정수를 나눈 몫과 나머지를 동시에 구할 때 사용하는 함수
def solution(n, q):
rev_base = ''
while n > 0:
n, mod = divmod(n, q)
rev_base += str(mod) #나머지들을 더함
return rev_base[::-1]
# 역순인 진수를 뒤집어 줘야 원래 변환 하고자하는 base가 출력
print(solution(45, 3))
#결과
1200
- 위의 코드는 10진수 이하만 가능
- 10~15를 A~F로 나타내도록 하는 전체진수 가능한 코드
#N진수 변환 함수
#10~15를 A~F로 나타낸다
def jinsu(n, base):
arr = "0123456789ABCDEF"
q, r = divmod(n, base)
if q == 0:
return arr[r]
else:
return jinsu(q, base) + arr[r] #맨뒤 나머지부터 출력됨
N진수 → N진수
- 위의 함수 작성 후
- N진수 → 10진수 → N진수로 변경
print(solution(int('c',16),4)) # 16진수인 C를 4진수로 바꾸는것
print(solution(int('4',6),3)) # 6진수인 4를 3진수로 바꾸는것
print(solution(int('21',3),7)) # 3진수인 21을 7진수로 바꾸는것
print(solution(int('15',9),5)) # 9진수인 15를 5진수로 바꾸는것
참고: daleSeo블로그
[파이썬] 2진수, 8진수, 16진수 다루기
Engineering Blog by Dale Seo
www.daleseo.com
'코딩테스트 > Python 개념' 카테고리의 다른 글
| [Python] enumerate() 함수 (0) | 2022.03.27 |
|---|---|
| [Python] 문자열 길이 지정하기 (.zfill(), .rjust(), format()) (0) | 2022.03.08 |
| [Python] 문자열 판별 함수: isdigit(), isdecimal(), isalpha(), isalnum() (0) | 2022.03.06 |
| [Python] .format() 함수- 문자열 포맷팅 (0) | 2022.02.23 |
| [Python] reverse VS reversed 함수 (0) | 2022.02.19 |