你如何在 Python 中表达二进制文字?
它们不是“二进制”文字,而是“整数文字”。您可以用二进制格式表示整数文字,a0
后跟 aB
或b
后跟一系列 0 和 1,例如:
>>> 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 版更改:现在允许在文字中使用下划线进行分组。
其他表示二进制的方式:
您可以在可以操作的字符串对象中包含零和一(尽管在大多数情况下您可能应该只对整数进行按位运算) - 只需将零和一的字符串以及您从 (2 ):
>>> int('010101', 2)
21
您可以选择使用0b
or0B
前缀:
>>> 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'