오랜만에 Python을 만지니까 하나도 기억이 안난다!
약간의 재활치료를 위해서 기록해본다. 마지막으로 작성했던 2진수에서 조금 더 발전한 글
1. 10진수를 2진수로 바꾸기 (내장함수)
python의 bin함수를 이용해서 간편하게 바꿀 수 있다.
a = 9
b = 4
c = 63
print(f"2진수로 변환한결과 : {bin(a), bin(b), bin(c)}")# output
2진수로 변환한결과 : ('0b1001', '0b100', '0b111111')예를 들어 9를 이진수로 바꾼결과는 0b1001처럼 앞에 못생긴 ‘0b’ 가 붙은 것을 알 수 있다.
(그리고 모양을 보면 알겠지만, 각각의 type은 string이다.)
이 문제를 해결하려면 format을 이용하면 된다.
a = 9
print(format(a, 'b'))# output
1001
# 만약 [1,0,0,1] 의 형태로 출력하고 싶다면
b = format(a, 'b')
print(list(b)) 를 하면 된다.2. 만약 n 자리 2진수로 변환하고 싶다면?
예를 들어 9는 이진수로 1001이지만, 6자리 이진수 즉 001001의 형태로 표현하고 싶을 수도 있다. 이 때 사용할 수 있는 내장함수로 zfill이있다. .zfill(n)을 활용하면, 길이가 n이 되기 전까지 문자열의 앞을 0으로 채워준다.
a = 9
b = format(a, "b")
wantedLength = 6
print(b.zfill(wantedLength))# output
001001cf) rjust라는 함수도 있는데, 이것을 활용하면 0 뿐만 아니라 원하는 문자열을 앞에 채울 수 있다.
3. 반대로 n진수를 10진수로 바꾸기
a = '001001'
b = int(a, 2)
print(b)# output
9단순하게 int(변환을 원하는 수, 작성된 진법)을 작성하면 10진수로 바꿔서 결과를 출력해준다. 이 때에는 앞에 접두사 ‘0b’가 없어도 잘 출력되며, zfill을 이용해서 앞에 0이 있어도 상관없다!
4. 내장함수 bin이 생각 안날 때 반복문으로 이진수 만들기
예를 들어 9라는 정수를 5자리 이진수로 만드는 방법을 예시로 들어보려고 한다.
a = 9
wantedLength = 5
ans = [0]*wantedLength
for i in range(wantedLength):
quo = a // (2**(wantedLength-1-i))
rem = a % (2**(wantedLength-1-i))
if quo == 1:
a = rem
ans[i] = 1
print(ans)# output
[0, 1, 0, 0, 1]
a = 20
def binary(n):
if n <= 1:
return str(n)
else:
return binary(n//2) + str(n % 2)
print(binary(a))# output
101005. 비트연산자를 이용해서 이진수 만들기
a = 9
wantedLength = 5
def binary(n):
output = ""
for j in range(wantedLength-1, -1, -1):
output += "1" if n & (1 << j) else "0"
return output
print(binary(a))# output
01001
Uploaded by N2T