如何在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版本之前使用的C样式八进制字面量的歧义。
一些整数字面量的示例:
7 2147483647 0o177 0b100110111
3 79228162514264337593543950336 0o377 0xdeadbeef
100_000_000_000 0b_1110_0101
从版本3.6开始更改:现在,下划线可以用于字面量的分组。
表达二进制的其他方式:
你可以使用字符串对象来表示0和1,并对其进行操作(虽然在大多数情况下,你应该只对整数进行按位操作)-只需将0和1的字符串和要转换的基数(2)传递给int函数即可:
>>> int('010101', 2)
21
您可以选择使用前缀0b
或0B
:
>>> int('0b0010101010', 2)
170
如果你将基数设置为0
,它会假设字符串没有前缀并使用十进制:
>>> 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'