Cum exprimați literali binare în Python?
Nu sunt literali "binari", ci mai degraba "literali intregi". Puteți să exprimați literalmente întregi cu un format binar cu un 0
urmat de un B
sau b
urmat de o serie de zerouri și de exemplu :
>>> 0b0010101010
170
>>> 0B010101
21
Din Python 3 Docs , acestea sunt modalitățile de a furniza un număr întreg literali în Python:
Literele întregi sunt descrise de următoarele definiții lexicale:
integer :: = decinteger bininteger | octinteger | hexinteger
decinteger :: = nonzerodigit (["_"] cifră) * "0" + (["_"] "0") *
bininteger :: = "0" ("b" | "B") (["_"] bindigit) +
octinteger :: = "0" ("o" | "O") (["_"] octdigit) +
hexinteger :: = "0" ("x" | "X") (["_"] hexdigit) +
nonzerodigit :: = "1" ... "9"
cifră :: = "0" ... "9"
bindigit :: = "0" "1"
octdigit :: = "0" ... "7"
hexdigit :: = cifră "a" ... "f" "A" ... "F"
Nu există nicio limită pentru lungimea literalurilor întregi în afară de ce
pot fi stocate în memoria disponibilă.
Rețineți că nu sunt permise zerouri de conducere într-un număr zecimal diferit de zero.
Aceasta este pentru dezambiguare cu litere octale în stil C, pe care Python
folosit înainte de versiunea 3.0.
Câteva exemple de literali întregi:
7 2147483647 0o177 0b100110111
3 79228162514264337593543950336 0o377 0xdeadbeef
100_000_000_000 0b_1110_0101
Modificat în versiunea 3.6: Undercoresele sunt acum permise în scopuri de grupare în literali.
Alte modalități de exprimare binară:
Puteți avea zerouri și cele dintr-un obiect șir de caractere care pot fi manipulate (deși, probabil, ar trebui să faceți doar operații la nivel de bit pe întreg, în cele mai multe cazuri) - trebuie doar să treci int șirul de zero-uri și cele și baza pe care se face conversia de la (2 ):
>>> int('010101', 2)
21
Puteți să aveți opțional prefixul 0b
sau 0B
:
>>> int('0b0010101010', 2)
170
Dacă îi dați ca bază 0
, va presupune baza 10 dacă șirul nu specifică cu un prefix:
>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21
Conversia de la int înapoi la binar citit de om:
Puteți trece un număr întreg în bin pentru a vedea reprezentarea șirului 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 utiliza ș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'