Come si fa a esprimere letterali binari in Python?

voti
303

Come si fa a esprimere un intero come un numero binario con letterali Python?

Sono stato facilmente in grado di trovare la risposta per hex:

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

e ottale:

>>> 01267
695
>>> 0100
64

Come si usa letterali di esprimere binario in Python?


Sintesi delle risposte

  • Python 2.5 e precedenti: possono esprimere utilizzando binari int('01010101111',2), ma non con un letterale.
  • Python 2.5 e precedenti: non v'è alcun modo per esprimere letterali binari.
  • Python 2.6 beta: Si può fare in questo modo: 0b1100111o 0B1100111.
  • Python 2.6 beta: sarà anche consentire 0o27o 0O27(secondo carattere è la lettera O) per rappresentare un ottale.
  • Python 3.0 beta: come 2.6, ma non permetterà più la vecchia 027sintassi per ottali.
È pubblicato 04/08/2008 alle 19:20
fonte dall'utente
In altre lingue...                            


6 risposte

voti
241

Per Reference futuro possibilità di Python:
A partire da Python 2.6 è possibile esprimere letterali binarie utilizzando il prefisso 0b o 0B :

>>> 0b101111
47

È inoltre possibile utilizzare il nuovo bidone funzione per ottenere la rappresentazione binaria di un numero:

>>> bin(173)
'0b10101101'

Versione di sviluppo della documentazione: Cosa c'è di nuovo in Python 2.6

Risposto il 16/08/2008 a 13:35
fonte dall'utente

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

Un altro modo.

Risposto il 04/08/2008 a 19:34
fonte dall'utente

voti
11

Come si fa a esprimere letterali binari in Python?

Sono non letterali "binarie", ma piuttosto, "letterali interi". È possibile esprimere letterali interi con un formato binario con 0seguita da una Bo bseguita da una serie di zero e uno, per esempio:

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

Dalle Python 3 documenti , questi sono i modi di fornire letterali interi in Python:

letterali interi sono descritte dalle seguenti definizioni lessicali:

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"

Non esiste un limite per la lunghezza di letterali interi oltre a quello che può essere memorizzato nella memoria disponibile.

Nota che zeri iniziali in un numero decimale diverso da zero non sono ammessi. Questo è per disambiguazione con letterali ottale C-stile, che di pitone utilizzata prima della versione 3.0.

Alcuni esempi di letterali interi:

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

Modificato nella versione 3.6: sottolineatura sono ora autorizzati a fini di raggruppamento in letterali.

Altri modi di esprimere binario:

Si possono avere i zeri e uno in un oggetto stringa che può essere manipolata (anche se probabilmente si dovrebbe fare solo operazioni bit per bit sul numero intero nella maggior parte dei casi) - basta passare int la stringa di zero e uno e la base si sta convertendo da (2 ):

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

Opzionalmente si può avere la 0bo 0Bprefisso:

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

Se si passa 0come base, si assumerà base 10 se la stringa non specifica con un prefisso:

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

La conversione da int torna a binario leggibile:

È possibile passare un numero intero a bin a vedere la rappresentazione di stringa di un letterale binario:

>>> bin(21)
'0b10101'

E si possono combinare bine intdi andare avanti e indietro:

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

È possibile utilizzare una specifica di formato e, se si vuole avere larghezza minima con zeri non significativi:

>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'
Risposto il 14/05/2016 a 11:58
fonte dall'utente

voti
1

0 in partenza qui specifica che la base è di 8 (non 10), che è abbastanza facile da vedere:

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

Se non si inizia con un 0, poi python assume il numero è in base 10.

>>> int('10101', 0)
10101
Risposto il 21/06/2016 a 22:48
fonte dall'utente

voti
-1

Sono abbastanza sicuro che questo è una delle cose dovute al mutamento di Python 3.0 con forse bin () per andare con hex () e ottobre ().

EDIT: La risposta di lbrandy è corretta in tutti i casi.

Risposto il 04/08/2008 a 19:27
fonte dall'utente

voti
-1

Per quanto posso dire Python, attraverso 2.5, supporta solo esadecimali e ottale letterali. Ho trovato alcune discussioni circa l'aggiunta di binario per le versioni future, ma nulla di definito.

Risposto il 04/08/2008 a 19:26
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more