Як ви виражаєте бінарні літерали в Python?
Вони не "бінарні" літерали, а скоріше "цілі літерали". Ви можете висловити цілочисельні літерали довічного формату з 0
супроводжуваним B
або b
пішли серія з нулів і одиниць, наприклад:
>>> 0b0010101010
170
>>> 0B010101
21
З Документів Python 3 це способи надання цілих літералів у 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"
Немає обмеження для довжини цілих чисел, крім того, що може зберігатися у доступній пам'яті.
Зверніть увагу, що провідні нулі в ненульовому десятковому числі не допускаються. Це для розбіжностей з восьми буквальними буквами у стилі С, які 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'