Jak można wyrazić binarne literały w Pythonie?
Oni nie „binarne literały”, ale raczej „literały całkowite”. Można wyrazić literały całkowite w formacie binarnym z 0
zastosowaną przez B
lub b
po serii zer i jedynek, na przykład:
>>> 0b0010101010
170
>>> 0B010101
21
Z Python 3 docs , są to sposoby udzielania literały całkowite w Pythonie:
Całkowitymi literałami są opisane w następujących definicji słownikowych:
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 ograniczeń co do długości całkowitych literałów oprócz tego, co może być przechowywany w dostępnej pamięci.
Zauważ, że zer wiodących w niezerową liczbę dziesiętną nie są dozwolone. To jest dla dezambiguacji z C-stylu literały ósemkowe, które Python stosowanych przed wersją 3.0.
Niektóre przykłady literałach całkowitą:
7 2147483647 0o177 0b100110111
3 79228162514264337593543950336 0o377 0xdeadbeef
100_000_000_000 0b_1110_0101
Zmieniono w wersji 3.6: podkreślenia są obecnie dopuszczone do celów grupowania w literałów.
Inne sposoby wyrażania binarne:
Możesz mieć zer i jedynek w obiekcie strun, które mogą być manipulowane (choć powinieneś po prostu zrobić operacje bitowe na całkowitą w większości przypadków) - po prostu przekazać int ciąg zer i jedynek i podstawą jesteś konwersji z (2 ):
>>> int('010101', 2)
21
Opcjonalnie można mieć 0b
lub 0B
prefiks:
>>> int('0b0010101010', 2)
170
Jeśli przekazać go 0
jako bazy, to zakładamy bazę 10 Jeśli łańcuch nie określa z przedrostkiem:
>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21
Konwersja z int powrotem do czytelnej binarnym:
Można przekazać liczbę całkowitą do kosza, aby zobaczyć reprezentację ciąg binarny dosłownym:
>>> bin(21)
'0b10101'
I można połączyć bin
i int
przejść tam iz powrotem:
>>> bin(int('010101', 2))
'0b10101'
Można użyć specyfikację formatu, jak również, jeśli chcesz mieć minimalną szerokość z poprzednich zer:
>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'