Как выразить двоичные литералы в Python?

Как выразить целое число в виде двоичного числа с помощью литералов Python?

Я легко смог найти ответ для шестнадцатеричного числа:

>>> 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 для восьмеричных чисел.
Решение

Для reference& mdash; future возможности Пайтона:
Начиная с Питона 2.6 Вы можете выразить двойные опечатки, используя префикс 0b или 0B :

>>> 0b101111
47

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

>>> bin(173)
'0b10101101'

Версия развития документации: [What' s Новый у Питона 2.6] (http://docs.python.org/dev/whatsnew/2.6.html#pep-3127-integer-literal-support-and-syntax)

Комментарии (0)
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255

Другой способ.

Комментарии (1)

, Как Вы выражаете двойные опечатки в Пайтоне?

They' ре не " binary" опечатки, а скорее, " целое число literals". Вы можете выразить опечатки целого числа двоичным форматом с '0' сопровождаемых 'B' или 'b', сопровождаемым серией нолей и, например:

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

От Пайтона 3 доктора, это способы обеспечить опечатки целого числа в Пайтоне:

опечатки Целого числа описаны следующими лексическими определениями:

целое число:: = decinteger | bininteger | octinteger | hexinteger decinteger:: = nonzerodigit ([" "] цифра) * | " 0" + ([" "] " 0") * bininteger:: = " 0" (" b" | " B") ([" "] bindigit) + octinteger:: = " 0" (" o" | " O") ([" "] octdigit) + hexinteger:: = " 0" (" x" | " X") ([" _ "] hexdigit) + nonzerodigit:: = " 1"..." 9" цифра:: = " 0"..." 9" bindigit:: = " 0" | " 1" octdigit:: = " 0"..." 7" hexdigit:: = цифра | " a"..." f" | " A"..." F"

нет никакого предела для длины опечаток целого числа кроме какой может быть сохранен в доступной памяти.

Обратите внимание, что ведущие ноли в отличном от нуля десятичном числе не позволены. Это - для разрешения неоднозначности с C-стилем октальные опечатки, который Пайтон используемый перед версией 3.0.

Некоторые примеры опечаток целого числа:

7 2 147 483 647 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 если последовательность doesn' t определяют с префиксом:

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

Преобразование ## из интервала назад к человекочитаемому набору из двух предметов:

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

>>> bin(21)
'0b10101'

И Вы можете объединить 'мусорное ведро' и 'интервал', чтобы пойти назад и вперед:

>>> 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)

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

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

Если Вы don' t начинаются с 0, тогда питон предполагает, что число основное 10.

>>> int('10101', 0)
10101
Комментарии (0)

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

Комментарии (0)

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

EDIT: Ответ lbrandy' верен во всех случаях.

Комментарии (0)