Vă mulțumim pentru susținere

Cum se exprimă literalurile binare în Python?

Cum exprimați un număr întreg ca număr binar cu literali Python?

Am fost ușor de găsit răspunsul pentru hex:

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

și octal:

>>> 01267
695
>>> 0100
64

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


Rezumatul răspunsurilor

  • Python 2.5 și mai devreme: poate exprima binar folosind int ('01010101111', 2) dar nu cu literal. </
  • Python 2.5 și versiunile anterioare: nu există nici un fel pentru a exprima literalurile binare.
  • Python 2.6 beta: Puteți face acest lucru: 0b1100111 sau 0B1100111 .
  • Python 2.6 beta: va permite de asemenea 0o27 sau 0O27 (al doilea caracter este litera O)
  • Python 3.0 beta: La fel ca 2.6, dar nu va mai permite sintaxa mai veche 027 pentru octalii.
0
adăugat editat

6 răspunsuri

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

Altă cale.

0
adăugat
Acest lucru este interesant atunci când aveți șiruri de caractere, dar dacă lucrați cu numere pure, adăugați calcule inutile la cod.
adăugat autor Daniel Möller

Sunt destul de sigur că acesta este unul din lucrurile datorate schimbării în Python 3.0, probabil cu bin () pentru a merge cu hex () și oct ().

EDITAȚI | ×: Răspunsul lui lbrandy este corect în toate cazurile.

0
adăugat

As far as I can tell Python, up through 2.5, only supports hexadecimal & octal literals. I did find some discussions about adding binary to future versions but nothing definite.

0
adăugat

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'
0
adăugat

For reference—future Python possibilities:
Starting with Python 2.6 you can express binary literals using the prefix 0b or 0B:

>>> 0b101111
47

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

>>> bin(173)
'0b10101101'

Development version of the documentation: What's New in Python 2.6

0
adăugat

0 la începutul aici specifică faptul că baza este de 8 (nu 10), care 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 baza 10.

>>> int('10101', 0)
10101
0
adăugat