Come si esprimono letterali binari in Python?
Non sono letterali "binari", ma piuttosto "letterali interi". È possibile esprimere valori letterali interi con un formato binario con un 0
seguito da un B
o b
seguito da una serie di zeri e uno, ad esempio:
>>> 0b0010101010
170
>>> 0B010101
21
Dai documenti di Python 3 , questi sono i modi per fornire valori letterali interi in Python:
I 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 a parte ciò che può essere archiviato nella memoria disponibile.
Si noti che gli zeri iniziali in un numero decimale diverso da zero non sono consentiti. Questo è per chiarimento con i letterali ottali in stile C, che Python usava 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 ora sono consentiti per scopi di raggruppamento in valori letterali.
Altri modi di esprimere il binario:
Puoi avere gli zeri e quelli in un oggetto stringa che può essere manipolato (anche se nella maggior parte dei casi dovresti fare semplicemente operazioni bit a bit sull'intero) - passa semplicemente la stringa di zeri e uno e la base da cui stai convertendo (2 ):
>>> int('010101', 2)
21
Opzionalmente puoi avere il prefisso 0b
o 0B
:
>>> int('0b0010101010', 2)
170
Se lo passi 0
come base, assumerà la base 10 se la stringa non specifica con un prefisso:
>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21
Conversione da int di nuovo in binario leggibile dall'uomo:
Puoi passare un numero intero al 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 usare anche una specifica di formato, se vuoi 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'