如何表达一个整数作为与Python文字二进制数?
我很容易就能找到答案的十六进制:
>>> 0x12AF
4783
>>> 0x100
256
和八进制:
>>> 01267
695
>>> 0100
64
你如何使用文字Python中表示二进制?
答案汇总
- Python 2.5的和早期:能表达二进制使用
int('01010101111',2)
但不与文字。 - Python的2.5和更早的:没有任何方式来表达二进制文字。
- Python的2.6测试版:你可以做像这样:
0b1100111
或0B1100111
。 - Python 2.6中的β:还将允许
0o27
或0O27
(第二个字符是字母O)来表示一个八进制。 - Python的3.0测试版:同2.6,但将不再允许老
027
语法八进制。
对于参比未来的Python的可能性:
与Python 2.6开始,你可以使用前缀0b或0B表达二进制文字:
>>> 0b101111
47
您还可以使用新宾函数来获取数字的二进制表示:
>>> bin(173)
'0b10101101'
文档的开发版本: 什么在Python 2.6的新功能
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255
其他方式。
如何表达在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"
这里距什么可以存储在可用内存为整数文字的长度没有限制。
请注意,在一个非零十进制数前导零是不允许的。 这是与C风格的八进制文字,它是由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(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'
在这里开始0指定所述碱是8(不是10),这是很容易看到:
>>> int('010101', 0)
4161
如果不以0开始,然后蟒蛇假设数量为基础10。
>>> int('10101', 0)
10101
至于我可以告诉Python的,向上穿过2.5,只支持十六进制和文字。 我没有找到有关添加二进制到将来的版本,但没有明确的一些讨论。
我敢肯定,这是华侨城()由于在Python 3.0改变也许与滨()去与十六进制()和的事情之一。
编辑:lbrandy的答案是在所有情况下是正确的。