Как выразить целое число как двоичное число с помощью литералов Python?
Я легко смог найти ответ на шестнадцатеричный:
>>> 0x12AF
4783
>>> 0x100
256
и восьмеричный:
>>> 01267
695
>>> 0100
64
Как вы используете литералы для выражения двоичного кода в Python?
Резюме ответов
int('01010101111',2), но не с помощью литерала.0b1100111 или 0B1100111.0o27 или 0O27 (второй символ - буква O) представлять восьмеричное число.027 для восьмеричных чисел.





Насколько я могу судить, Python до версии 2.5 поддерживает только шестнадцатеричные и восьмеричные литералы. Я нашел несколько дискуссий о добавлении двоичного кода в будущие версии, но ничего определенного.
Я почти уверен, что это одна из причин изменения в Python 3.0, возможно, вместо bin () с hex () и oct ().
Обновлено: Ответ Ибранди верен во всех случаях.
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255
По-другому.
Для справки - будущее Возможности 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_0101Changed 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
Вы можете передать целое число в 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
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
Это интересно, когда у вас есть строки, но при работе с чистыми числами вы добавляете в код ненужные вычисления.