Python

[Python] 11. Python에서 10진수와 2진수 변환을 자유롭게 해보자

개발자 뭄뭄 2023. 2. 24. 10:54
반응형

오랜만에 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

001001

cf) 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

10100

5. 비트연산자를 이용해서 이진수 만들기

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

반응형