Jak wyrażasz literały binarne w Pythonie?
Nie są to literały „binarne”, lecz „literały całkowite”. Możesz wyrażać literały całkowite w formacie binarnym, 0
po którym następuje a B
lub b
po nich ciąg zer i jedynek, na przykład:
>>> 0b0010101010
170
>>> 0B010101
21
Z dokumentacji w Pythonie 3 są następujące sposoby zapewnienia literałów całkowitych w Pythonie:
Literały całkowite są opisane następującymi definicjami leksykalnymi:
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"
Nie ma limitu długości literałów całkowitych oprócz tego, co można przechowywać w dostępnej pamięci.
Zauważ, że początkowe zera w niezerowej liczbie dziesiętnej są niedozwolone. Ma to na celu ujednoznacznienie z literałami ósemkowymi w stylu C, których Python używał przed wersją 3.0.
Kilka przykładów literałów całkowitych:
7 2147483647 0o177 0b100110111
3 79228162514264337593543950336 0o377 0xdeadbeef
100_000_000_000 0b_1110_0101
Zmieniono w wersji 3.6: Podkreślenia są teraz dozwolone do celów grupowania w literałach.
Inne sposoby wyrażenia binarnego:
Możesz mieć zera i jedynki w obiekcie łańcuchowym, którymi można manipulować (chociaż w większości przypadków prawdopodobnie powinieneś po prostu wykonać operacje bitowe na liczbie całkowitej) - po prostu przekaż int ciąg zer i jedynek oraz bazę, z której konwertujesz (2 ):
>>> int('010101', 2)
21
Opcjonalnie możesz mieć prefiks 0b
lub 0B
:
>>> int('0b0010101010', 2)
170
Jeśli przekażesz go 0
jako podstawę, przyjmie on podstawę 10, jeśli ciąg nie zostanie określony z prefiksem:
>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21
Konwertowanie z int z powrotem na binarny czytelny dla człowieka:
Możesz podać liczbę całkowitą do bin, aby zobaczyć ciąg reprezentujący literał binarny:
>>> bin(21)
'0b10101'
Możesz łączyć bin
i int
poruszać się w tę iz powrotem:
>>> bin(int('010101', 2))
'0b10101'
Możesz również użyć specyfikacji formatu, jeśli chcesz mieć minimalną szerokość z poprzedzającymi zerami:
>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'