Как вы выражаете двоичные литералы в Python?
Они не "двоичные" литералы, а скорее "целочисленные литералы". Вы можете выразить целочисленные литералы в двоичном формате с 0
, за которым следует B
или b
, за которым следует ряд нулей и единиц, например:
>>> 0b0010101010
170
>>> 0B010101
21
Из документов Python 3 это способы предоставления целочисленных литералов в Python:
Целочисленные литералы описываются следующими лексическими определениями:
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"
Нет ограничений на длину целочисленных литералов, кроме
можно сохранить в доступной памяти.
Обратите внимание, что начальные нули в ненулевом десятичном числе не допускаются.
Это для устранения неоднозначности с восьмеричными литералами в стиле C, которые Python
использовался до версии 3.0.
Некоторые примеры целочисленных литералов:
7 2147483647 0o177 0b100110111
3 79228162514264337593543950336 0o377 0xdeadbeef
100_000_000_000 0b_1110_0101
Изменено в версии 3.6: Подчеркивания теперь разрешены для группирования по литералам.
Другие способы выражения двоичного кода:
Вы можете иметь нули и единицы в строковом объекте, которым можно манипулировать (хотя в большинстве случаев вам, вероятно, следует просто выполнять побитовые операции с целым числом) - просто передайте int строку нулей и единиц и основание, которое вы конвертируете из (2):
>>> int('010101', 2)
21
При желании вы можете иметь префикс 0b
или 0B
:
>>> int('0b0010101010', 2)
170
Если вы передадите его 0
в качестве основания, оно примет основание 10, если строка не указывает префикс:
>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21
Преобразование из int обратно в двоичный код, читаемый человеком:
Вы можете передать целое число в bin, чтобы увидеть строковое представление двоичного литерала:
>>> bin(21)
'0b10101'
И вы можете комбинировать bin
и int
, чтобы переходить туда-сюда:
>>> bin(int('010101', 2))
'0b10101'
Вы также можете использовать спецификацию формата, если вы хотите иметь минимальную ширину с предыдущими нулями:
>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'