Как вы выражаете двоичные литералы в 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.

766   6  

6 ответов:

Для справки-будущее возможности Python:
Начиная с Python 2.6 вы можете выражать двоичные литералы с помощью префикса 0b или 0B:

>>> 0b101111
47

вы также можете использовать новый тег bin функция для получения двоичного представления числа:

>>> bin(173)
'0b10101101'

разработка версии документации:что нового в Python 2.6

>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255

другой путь.

как вы выражаете двоичные литералы в 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

    Ничего не найдено.