Как вы выражаете двоичные литералы в Python?
как выразить целое число в виде двоичного числа с помощью литералов Python?
Я легко смог найти ответ для hex:
>>> 0x12AF
4783
>>> 0x100
256
и восьмеричное:
>>> 01267
695
>>> 0100
64
как вы используете литералы для выражения двоичного кода в Python?
резюме ответов
- Python 2.5 и ранее: может выражать двоичный код с помощью
int('01010101111',2)но не с буквальным. - Python 2.5 и ранее: есть ни для выражения двоичных литералов.
- Python 2.6 beta: вы можете сделать так:
0b1100111или0B1100111. - Python 2.6 beta: также позволит
0o27или0O27(второй символ-буква O) для обозначения восьмеричного числа. - Python 3.0 beta: то же самое, что и 2.6, но больше не позволит старым
027синтаксис для octals.
6 ответов:
Для справки-будущее возможности Python:
Начиная с Python 2.6 вы можете выражать двоичные литералы с помощью префикса 0b или 0B:>>> 0b101111 47вы также можете использовать новый тег bin функция для получения двоичного представления числа:
>>> bin(173) '0b10101101'разработка версии документации:что нового в Python 2.6
как вы выражаете двоичные литералы в Python?
это не "двоичные" литералы, а скорее "целочисленные литералы". Вы можете выразить целочисленные литералы в двоичном формате с помощью
0затемBилиbзатем следует ряд нулей и единиц, например:>>> 0b0010101010 170 >>> 0B010101 21от питона 3 docs, это способы предоставления целочисленных литералов в 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'
0 в начале здесь указывает, что база равна 8 (а не 10), что довольно легко увидеть:
>>> int('010101', 0) 4161Если вы не начинаете с 0, то python предполагает, что число является базовым 10.
>>> int('10101', 0) 10101
насколько я могу судить Python, до 2.5, поддерживает только шестнадцатеричные и восьмеричные литералы. Я нашел некоторые дискуссии о добавлении двоичного кода в будущие версии, но ничего определенного.
Я уверен, что это одна из вещей, связанных с изменением в Python 3.0, возможно, bin (), чтобы пойти с hex() и oct().
изменить: ответ лбранди верен во всех случаях.
Comments