Cum se exprimă literalele binare în Python? (Programare, Python, Sintaxă, Binar, Număr Întreg, Literals)

Justin Standard a intrebat.

Cum se exprimă un număr întreg ca număr binar cu literali în Python?

Am reușit cu ușurință să găsesc răspunsul pentru hexagonal:

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

și octal:

>>> 01267
695
>>> 0100
64

Cum folosiți literali pentru a exprima binar în Python?


Rezumat al răspunsurilor

  • Python 2.5 și versiunile anterioare: se poate exprima binar folosind int('01010101111',2) dar nu cu un literal.
  • Python 2.5 și versiunile anterioare: există nicio modalitate de a exprima literale binare.
  • Python 2.6 beta: Se poate face așa: 0b1100111 sau 0B1100111.
  • Python 2.6 beta: va permite de asemenea 0o27 sau 0O27 (al doilea caracter este litera O) pentru a reprezenta un octal.
  • Python 3.0 beta: La fel ca 2.6, dar nu va mai permite vechiul 027 pentru octale.

8 răspunsuri
Andreas Thomas

Pentru referință-viitor Posibilități Python:
Începând cu Python 2.6 puteți exprima literali binari folosind prefixul 0b sau 0B:

>>> 0b101111
47

De asemenea, puteți utiliza noul bin pentru a obține reprezentarea binară a unui număr:

>>> bin(173)
'0b10101101'

Versiunea de dezvoltare a documentației: Ce este nou în Python 2.6

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

O altă modalitate.

Comentarii

  • Acest lucru este interesant pentru atunci când aveți șiruri de caractere, dar dacă lucrați cu numere pure, adăugați calcule inutile la cod. –  > Por Daniel Möller.
Aaron Hall

Cum se exprimă literali binari în Python?

Nu sunt literali „binari”, ci mai degrabă „literali întregi”. Puteți exprima literali întregi cu un format binar cu ajutorul unui 0 urmat de un B sau b urmat de o serie de zerouri și unu, de exemplu:

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

Din manualul Python 3 docs, , acestea sunt modalitățile de a furniza literali de numere întregi în Python:

Literalii de numere întregi sunt descriși prin următoarele definiții lexicale:

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"

Nu există nicio limită pentru lungimea literaliilor de numere întregi în afară de cea care poate fi stocată în memoria disponibilă.

Rețineți că nu sunt permise zerourile de început într-un număr zecimal diferit de zero. Acest lucru este pentru dezambiguizare cu literali octali în stil C, pe care Python îi folosea înainte de versiunea 3.0.

Câteva exemple de literali de numere întregi:

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

Modificat în versiunea 3.6: Sublinierile sunt acum permise în scopuri de grupare în literali.

Alte moduri de exprimare a binarului:

Puteți avea zerourile și unu într-un obiect de tip șir de caractere care poate fi manipulat (deși, probabil, în majoritatea cazurilor, ar trebui să efectuați doar operații de tip bitwise asupra numărului întreg) – trebuie doar să îi treceți lui int șirul de zerouri și unu și baza din care faceți conversia (2):

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

Opțional, puteți să aveți opțiunea 0b sau 0B prefix:

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

Dacă îl treceți 0 ca bază, se va presupune baza 10 dacă șirul nu este specificat cu un prefix:

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

Conversia din int în binar lizibil pentru oameni:

Puteți trece un număr întreg către bin pentru a vedea reprezentarea în șir a unui literal binar:

>>> bin(21)
'0b10101'

Și puteți combina bin și int pentru a merge înainte și înapoi:

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

Puteți folosi și o specificație de format, dacă doriți să aveți o lățime minimă cu zerouri precedente:

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

Comentarii

  • int(hex(1234), 16) = 1234 😀 –  > Por Jean Monet.
Mehmet Ugurbil

0 la început aici specifică faptul că baza este 8 (nu 10), ceea ce este destul de ușor de văzut:

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

Dacă nu începeți cu un 0, atunci python presupune că numărul este în baza 10.

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

Marginea Novus

O altă metodă bună pentru a obține o reprezentare întreagă din binar este utilizarea eval()

Astfel:

def getInt(binNum = 0):
    return eval(eval('0b' + str(n)))

Cred că și aceasta este o modalitate de a face acest lucru. sper că acesta este un răspuns satisfăcător 😀

Ranjeet R Patil

Am încercat acest lucru în Python 3.6.9

Convertiți binar în zecimal

>>> 0b101111
47

>>> int('101111',2)
47

Convertiți zecimal în binar

>>> bin(47)
'0b101111'

Puneți un 0 ca al doilea parametru python îl presupune ca fiind zecimal.

>>> int('101111',0)
101111

Mark Biek

Din câte îmi dau seama, Python, până la 2.5, acceptă doar hexazecimal & octal literals. Am găsit câteva discuții despre adăugarea binarului la versiunile viitoare, dar nimic definitiv.

sparkes

Sunt destul de sigur că acesta este unul dintre lucrurile care urmează să se schimbe în Python 3.0, poate cu bin() pentru a merge cu hex() și oct().

EDIT:Răspunsul lui lbrandy este corect în toate cazurile.