Как вы выражаете двоичные литералы в 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 для восьмеричных чисел.
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
373
0
255 602
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

Я почти уверен, что это одна из причин изменения в Python 3.0, возможно, вместо bin () с hex () и oct ().

Обновлено: Ответ Ибранди верен во всех случаях.

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

По-другому.

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

Daniel Möller 18.08.2017 20:34
Ответ принят как подходящий

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

>>> 0b101111
47

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

>>> bin(173)
'0b10101101'

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

How do you express binary literals in Python?

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

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

Из Python 3 документы это способы предоставления целочисленных литералов в Python:

Integer literals are described by the following lexical definitions:

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"

There is no limit for the length of integer literals apart from what can be stored in available memory.

Note that leading zeros in a non-zero decimal number are not allowed. This is for disambiguation with C-style octal literals, which Python used before version 3.0.

Some examples of integer literals:

7     2147483647                        0o177    0b100110111
3     79228162514264337593543950336     0o377    0xdeadbeef
      100_000_000_000                   0b_1110_0101

Changed in version 3.6: Underscores are now allowed for grouping purposes in literals.

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

У вас могут быть нули и единицы в строковом объекте, которым можно манипулировать (хотя в большинстве случаев вам, вероятно, следует просто выполнять побитовые операции с целым числом) - просто передайте 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'

int(hex(1234), 16) = 1234: D

Jean Monet 12.09.2020 14:10

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

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

Если вы не начинаете с 0, тогда python предполагает, что это число с основанием 10.

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

Еще один хороший способ получить целочисленное представление из двоичного кода - использовать eval ()

Вот так:

def getInt(binNum = 0):
    return eval(eval('0b' + str(n)))

Думаю, это тоже способ сделать это. Надеюсь, это удовлетворительный ответ: D

Я пробовал это в Python 3.6.9

Преобразовать двоичное в десятичное

>>> 0b101111
47

>>> int('101111',2)
47

Преобразование десятичного числа в двоичное

>>> bin(47)
'0b101111'

Поместите 0, поскольку второй параметр python считает его десятичным.

>>> int('101111',0)
101111

Другие вопросы по теме