Python 3에서 정수를 이진수로 변환하는 방법


정답

그것이 Python의 아름다움입니다. 많은 일반적인 작업이 이미 구현되어 있습니다. 이것이 바로 그러한 경우입니다.

내장 된 bin() 함수를 사용할 수 있습니다. 다음은 Python이 제공하는 bin()에 대한 설명입니다.

정수를 이진 문자열로 변환합니다. 결과는 유효한 Python 표현식입니다. x 가 Python int 객체가 아닌 경우 \_\_index\_\_() 메서드는 정수를 반환합니다.

사용하려면 음수가 아닌 정수를 전달하면됩니다. 다음은 몇 가지 사용 예입니다.

>>> bin(0)

"0b0"

>>> bin(12)

"0b1100"

>>> bin(25)

"0b11001"

>>> bin(250)

"0b11111010"

>>> bin(2440)

"0b100110001000"

하지만 학습 목적으로 10 진수에서 2 진수로 변환하는 자체 함수를 구현하고 싶을 수도 있습니다. 이 경우 내가 사용한 알고리즘에 대한 설명과 구현은 다음과 같습니다.

def decimal\_to\_binary(decimal):

""" Given a whole, decimal integer,

convert it to a binary

representation

"""

# I"m only making this function support

# non-negative, whole integer only.

if not isinstance(decimal, int) or decimal < 0:

raise TypeError("Input must be a non-negitive, whole integer.")

# we need a stack to store each binary digit in.

stack = []

# while their are still digits left

# to convert in decimal.

while decimal > 0:

# caclute each binary number by dividing decimal

# by two. And since we are "building" our binary

# string backwards, insert() in the front of the

# list instead of append()-ing to the back.

stack.insert(0, str(decimal \% 2))

# after we"ve calcute the binary value of the current

# decimal, divide the decimal by 2. But make sure we

# use // instead of / to get a while number!

decimal = decimal // 2

# join() together each value in stack, and return

# the finished binary string. Note: I simply

# added the "0b" prefix because that is how Python

# prepends its binary strings. If you don"t perfer that,

# then simply remove the "0b" + part from bellow.

return "0b" + "".join(stack)

테스트 및 사용 :

>>> bin(0) == decimal\_to\_binary(0)

True

>>> bin(12) == decimal\_to\_binary(12)

True

>>> bin(25) == decimal\_to\_binary(25)

True

>>> bin(250) == decimal\_to\_binary(250)

True

>>> bin(2440) == decimal\_to\_binary(2440)

True

답변

Dripto Biswas가 제공하는 솔루션은 확실히 가장 빠릅니다. 그러나 알고 싶은 경우를 대비하여 대체 솔루션이 있습니다. 🙂

방법 # 2

>>> format(5, "b")

"101"

방법 # 3

>>> "{0:b}".format(5)

"101"

이제 다시 변환하려면

>>> int("101", 2)

5

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다