Как вы выражаете бинарные литералы в Python?

голоса
303

Как вы выражаете целое число в виде двоичного числа с литералами Python?

Я легко смог найти ответ на гекс:

>>> 0x12AF
4783
>>> 0x100
256

и восьмеричное:

>>> 01267
695
>>> 0100
64

Как использовать литералы, чтобы выразить двоичным в Python?


Резюме ответов

  • Python 2.5 и более ранних версий: можно выразить с помощью двоичной , int('01010101111',2)но не с буквальным.
  • Python 2.5 и более ранних версий: нет никакого способа , чтобы выразить бинарные литералы.
  • Python 2.6 бета: Вы можете сделать так: 0b1100111или 0B1100111.
  • Python 2.6 бета: также позволит 0o27или 0O27(второй символ буква O) представлять восьмеричную.
  • Python 3.0 бета: То же, что 2.6, но больше не будет позволять старший 027синтаксис для значения в восьмиричных.
Задан 04/08/2008 в 19:20
источник пользователем
На других языках...                            


6 ответов

голоса
241

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

>>> 0b101111
47

Вы также можете использовать новую бен функцию , чтобы получить двоичное представление числа:

>>> bin(173)
'0b10101101'

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

Ответил 16/08/2008 в 13:35
источник пользователем

голоса
64
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255

Другой путь.

Ответил 04/08/2008 в 19:34
источник пользователем

голоса
11

Как вы выражаете бинарные литералы в Python?

Они не «бинарные» литералы, но , скорее, «целые литералы». Вы можете выразить целочисленные литералы двоичного формата с 0сопровождаемым Bили bпоследовала серия из нулей и единиц, например:

>>> 0b0010101010
170
>>> 0B010101
21

Из Python 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: Подчеркивания теперь разрешены для группирования в литералах.

Другие способы выражения бинарного:

Вы можете иметь нули и единицы в объекте строки, которыми можно управлять (хотя вы, вероятно, следует просто сделать битовые операции на целое число в большинстве случаев) - просто передать ИНТ строку из нулей и единиц и основания вы превращающего из (2 ):

>>> int('010101', 2)
21

При желании вы можете иметь 0bили 0Bпрефикс:

>>> int('0b0010101010', 2)
170

Если вы передаете его в 0качестве основы, он будет считать , основание 10 , если строка не указывает префикс:

>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21

Преобразование из междунар обратно в читаемых двоичный человек:

Вы можете передать целое число в бункер, чтобы увидеть строковое представление двоичного литерала:

>>> 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'
Ответил 14/05/2016 в 11:58
источник пользователем

голоса
1

0 в начале здесь указывает, что база 8 (не 10), который довольно легко увидеть:

>>> int('010101', 0)
4161

Если вы не начать с 0, то Питон предполагает, что число является базой 10.

>>> int('10101', 0)
10101
Ответил 21/06/2016 в 22:48
источник пользователем

голоса
-1

Я уверен, что это одна из вещей, в связи с изменением в Python 3.0 возможно с бункером (), чтобы пойти с шестигранной () и октябрь ().

EDIT: ответ lbrandy является правильным во всех случаях.

Ответил 04/08/2008 в 19:27
источник пользователем

голоса
-1

Насколько я могу сказать, Python, вплоть через 2.5, поддерживает только шестнадцатеричные и восьмеричные литералы. Я нашел некоторые дискуссии о добавлении бинарного файла в будущие версии, но ничего определенного.

Ответил 04/08/2008 в 19:26
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more