파이썬에서 이진 리터럴을 어떻게 표현합니까?


351

파이썬 리터럴을 사용하여 정수를 이진수로 어떻게 표현합니까?

16 진수에 대한 답을 쉽게 찾을 수있었습니다.

>>> 0x12AF
4783
>>> 0x100
256

그리고 8 진법 :

>>> 01267
695
>>> 0100
64

파이썬에서 리터럴을 사용하여 바이너리를 어떻게 표현합니까?


답변 요약

  • Python 2.5 및 이전 버전 : int('01010101111',2)리터럴을 사용 하지 않고 바이너리를 표현할 수 있습니다 .
  • Python 2.5 및 이전 버전 : 이진 리터럴을 표현할 방법없습니다 .
  • Python 2.6 베타 : 그렇게 할 수 있습니다 : 0b1100111또는 0B1100111.
  • 파이썬 2.6 베타 : 8 진수를 나타내는 0o27또는 0O27(두 번째 문자는 문자 O) 도 허용 합니다.
  • Python 3.0 베타 : 2.6과 동일하지만 더 이상 0278 진수에 대한 이전 구문을 허용하지 않습니다 .

답변:


291

참고로- 미래의 파이썬 가능성 :
파이썬 2.6부터는 접두사 0b 또는 0B를 사용하여 이진 리터럴을 표현할 수 있습니다 .

>>> 0b101111
47

새로운 bin 함수를 사용하여 숫자의 이진 표현을 얻을 수도 있습니다 .

>>> bin(173)
'0b10101101'

설명서의 개발 버전 : Python 2.6의 새로운 기능


72
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255

또 다른 방법.


2
이것은 문자열이있을 때 흥미롭지 만 순수한 숫자로 작업하는 경우 코드에 불필요한 계산을 추가합니다.
Daniel Möller

28

파이썬에서 이진 리터럴을 어떻게 표현합니까?

그것들은 "이진"리터럴이 아니라 "정수 리터럴"입니다. 예를 들어 0다음에 a B또는 b뒤에 일련의 0과 1 이있는 이진 형식으로 정수 리터럴을 표현할 수 있습니다 .

>>> 0b0010101010
170
>>> 0B010101
21

Python 3 docs 에서 다음은 Python에서 정수 리터럴을 제공하는 방법입니다.

정수 리터럴은 다음 어휘 정의에 의해 설명됩니다.

integer      ::=  decinteger | bininteger | octinteger | hexinteger
decinteger   ::=  nonzerodigit (["_"] digit)* | "0"+ (["_"] "0")*
bininteger   ::=  "0" ("b" | "B") (["_"] bindigit)+
octinteger   ::=  "0" ("o" | "O") (["_"] octdigit)+
hexinteger   ::=  "0" ("x" | "X") (["_"] hexdigit)+
nonzerodigit ::=  "1"..."9"
digit        ::=  "0"..."9"
bindigit     ::=  "0" | "1"
octdigit     ::=  "0"..."7"
hexdigit     ::=  digit | "a"..."f" | "A"..."F"

사용 가능한 메모리에 저장할 수있는 것 외에 정수 리터럴의 길이에는 제한이 없습니다.

0이 아닌 10 진수에서 선행 0은 허용되지 않습니다. 이것은 파이썬이 3.0 버전 이전에 사용했던 C 스타일 8 진 리터럴을 명확하게하기위한 것입니다.

정수 리터럴의 몇 가지 예 :

7     2147483647                        0o177    0b100110111
3     79228162514264337593543950336     0o377    0xdeadbeef
      100_000_000_000                   0b_1110_0101

버전 3.6으로 변경 : 이제 밑줄을 리터럴로 그룹화 할 수 있습니다.

바이너리를 표현하는 다른 방법들 :

조작 할 수있는 문자열 객체에 0과 1을 가질 수 있습니다 (대부분의 경우 정수에서 비트 연산을 수행해야하지만)-0과 1의 문자열과 변환하는 밑을 int로 전달하십시오 (2 ) :

>>> int('010101', 2)
21

0b또는 0B접두사를 선택적으로 가질 수 있습니다 .

>>> int('0b0010101010', 2)
170

0문자열을 밑으로 전달 하면 문자열에 접두사가 지정되지 않으면 밑이 10으로 가정됩니다.

>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21

int에서 사람이 읽을 수있는 바이너리로 다시 변환 :

이진 리터럴의 문자열 표현을 보려면 정수를 bin에 전달할 수 있습니다.

>>> bin(21)
'0b10101'

그리고 당신은 결합 할 수 있습니다 binint앞뒤로 이동합니다 :

>>> bin(int('010101', 2))
'0b10101'

앞의 0으로 최소 너비를 원하면 형식 지정도 사용할 수 있습니다.

>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'

2

시작에서 0은 밑이 8 (10 아님)임을 나타내며,보기가 매우 쉽습니다.

>>> int('010101', 0)
4161

0으로 시작하지 않으면 파이썬은 숫자가 10을 가정합니다.

>>> int('10101', 0)
10101

-1

내가 말할 수있는 한, 2.5에서 2.5까지는 16 진 및 8 진 리터럴 만 지원합니다. 미래 버전에 바이너리를 추가하는 것에 대한 토론을 찾았지만 명확한 것은 없습니다.


-3

파이썬 3.0에서 아마도 bin ()을 hex () 및 oct ()와 함께 변경하여 파이썬 3.0에서 변경 한 것 중 하나라고 확신합니다.

편집 : lbrandy의 대답은 모든 경우에 맞습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.