Domanda

Come si esprime un numero intero come numero binario con i 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 usano i letterali per esprimere il binario in Python?


Riepilogo delle risposte

  • Python 2.5 e versioni precedenti:può esprimere l'uso binario int('01010101111',2) ma non con un valore letterale.
  • Python 2.5 e versioni precedenti:c'è non c'è modo per esprimere letterali binari.
  • Python 2.6 beta:Puoi fare così: 0b1100111 O 0B1100111.
  • Python 2.6 beta:consentirà anche 0o27 O 0O27 (il secondo carattere è la lettera O) per rappresentare un ottale.
  • Python 3.0 beta:Uguale alla versione 2.6, ma non consentirà più la versione precedente 027 sintassi per ottali.
È stato utile?

Soluzione

Per riferimento-futuro Possibilità di Python:
A partire da Python 2.6 puoi esprimere valori letterali binari usando il prefisso 0b O 0B:

>>> 0b101111
47

Puoi anche usare il nuovo bidone funzione per ottenere la rappresentazione binaria di un numero:

>>> bin(173)
'0b10101101'

Versione di sviluppo della documentazione: Novità in Python 2.6

Altri suggerimenti

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

Un altro modo.

Come si esprimono i letterali binari in Python?

Non sono letterali "binari", ma piuttosto "letterali interi".È possibile esprimere valori letterali interi in formato binario con a 0 seguito da a B O b seguito da una serie di zeri e uno, ad esempio:

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

Dal Python 3 documenti, questi sono i modi per fornire valori letterali interi in Python:

I valori letterali interi sono descritti 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 vi è alcun limite per la lunghezza dei letterali interi oltre a ciò che può essere immagazzinato nella memoria disponibile.

Tieni presente che non sono consentiti zeri iniziali in un numero decimale diverso da zero.Questo è per la disambiguazione con i letterali ottali in stile C, che Python ha usato prima della versione 3.0.

Alcuni esempi di valori letterali interi:

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

Modificato nella versione 3.6: I caratteri di sottolineatura sono ora consentiti per scopi di raggruppamento in valori letterali.

Altri modi di esprimere il binario:

Puoi avere gli zeri e gli in un oggetto stringa che può essere manipolato (anche se probabilmente dovresti fare solo operazioni bit a bit sull'intero nella maggior parte dei casi) - passa semplicemente la stringa di zeri e uno e la base da cui stai convertendo (2 ):

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

Opzionalmente puoi avere il 0b O 0B prefisso:

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

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

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

Conversione da int a binario leggibile dall'uomo:

Puoi passare un numero intero a bin per vedere la rappresentazione di stringa di un letterale binario:

>>> bin(21)
'0b10101'

E puoi combinare bin E int andare avanti e indietro:

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

Puoi anche utilizzare una specifica di formato, se desideri avere una larghezza minima con zeri precedenti:

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

0 all'inizio qui specifica che la base è 8 (non 10), il che è abbastanza facile da vedere:

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

Se non inizi con uno 0, Python presuppone che il numero sia in base 10.

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

Per quanto ne so, Python, fino alla versione 2.5, supporta solo valori letterali esadecimali e ottali.Ho trovato alcune discussioni sull'aggiunta di binari alle versioni future ma nulla di definito.

Sono abbastanza sicuro che questa sia una delle cose dovute al cambiamento in Python 3.0 con forse bin() da abbinare a hex() e oct().

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top