如何表达在Python中的二进制文字?(How do you express binary lite

2019-07-19 14:06发布

如何表达一个整数作为与Python文字二进制数?

我很容易就能找到答案的十六进制:

>>> 0x12AF
4783
>>> 0x100
256

和八进制:

>>> 01267
695
>>> 0100
64

你如何使用文字Python中表示二进制?


答案汇总

  • Python 2.5的和早期:能表达二进制使用int('01010101111',2)但不与文字。
  • Python的2.5和更早的:没有任何方式来表达二进制文字。
  • Python的2.6测试版:你可以做像这样: 0b11001110B1100111
  • Python 2.6中的β:还将允许0o270O27 (第二个字符是字母O)来表示一个八进制。
  • Python的3.0测试版:同2.6,但将不再允许老027语法八进制。

Answer 1:

对于参比未来的Python的可能性:
与Python 2.6开始,你可以使用前缀0b0B表达二进制文字:

>>> 0b101111
47

您还可以使用新函数来获取数字的二进制表示:

>>> bin(173)
'0b10101101'

文档的开发版本: 什么在Python 2.6的新功能



Answer 2:

>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255

其他方式。



Answer 3:

如何表达在Python中的二进制文字?

他们不是“二进制”文字,而是“整数文字”。 你可以表达与具有二进制格式整数常量0后跟一个Bb后跟一系列零和一,例如:

>>> 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

您可以选择有0b0B前缀:

>>> int('0b0010101010', 2)
170

如果你传递0为基准,它将假定基地10如果字符串不以一个前缀指定:

>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21

从int转换回人类可读的二进制文件:

你可以传递一个整数斌看到二进制文字的字符串表示:

>>> bin(21)
'0b10101'

你可以结合binint来来回走:

>>> bin(int('010101', 2))
'0b10101'

您可以使用格式规范为好,如果你想与前面的零最小宽度:

>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'


Answer 4:

在这里开始0指定所述碱是8(不是10),这是很容易看到:

>>> int('010101', 0)
4161

如果不以0开始,然后蟒蛇假设数量为基础10。

>>> int('10101', 0)
10101


Answer 5:

至于我可以告诉Python的,向上穿过2.5,只支持十六进制和文字。 我没有找到有关添加二进制到将来的版本,但没有明确的一些讨论。



Answer 6:

我敢肯定,这是华侨城()由于在Python 3.0改变也许与滨()去与十六进制()和的事情之一。

编辑:lbrandy的答案是在所有情况下是正确的。



文章来源: How do you express binary literals in Python?