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

你如何用Python文字表示整数作为二进制数字?

我很容易findhex的答案:

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

和八进制:

 >>> 01267 695 >>> 0100 64 

你如何使用文字在Python中expression二进制文件?


答案摘要

  • Python 2.5及更早版本:可以使用int('01010101111',2)来表示二进制文件int('01010101111',2)但不能与文字一起使用。
  • Python 2.5和更早的版本: 没有办法来expression二进制文字。
  • Python 2.6 beta:你可以这样做: 0b11001110B1100111
  • Python 2.6 beta:也将允许0o270O27 (第二个字符是字母O)来表示八进制。
  • Python 3.0 beta:与2.6相同,但不再允许旧的027语法用于八进制。

供参考 – 未来的 Python可能性:
从Python 2.6开始,您可以使用前缀0b0B来表示二进制文字:

 >>> 0b101111 47 

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

 >>> bin(173) '0b10101101' 

文档的开发版本: Python 2.6中的新function

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

其他方式。

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

它们不是“二元”文字,而是“整数文字”。 您可以使用二进制格式表示整数文字,其中0表示Bb后面是一系列的零和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" 

除了可以存储在可用存储器中的内容之外,整数文字的长度没有限制。

请注意,不允许使用非零十进制数的前导零。 这是为了消除C语言的八进制字面值,Python在3.0以前使用。

整数文字的一些例子:

 7 2147483647 0o177 0b100110111 3 79228162514264337593543950336 0o377 0xdeadbeef 100_000_000_000 0b_1110_0101 

在版本3.6中更改:下划线现在允许用文字分组。

其他expression二进制的方式:

你可以在一个可以被操作的string对象中包含零和string(尽pipe在大多数情况下你可能只需要在整数上进行按位运算) – 只需要传递int和零的string以及从中转换的基数(2 ):

 >>> int('010101', 2) 21 

您可以select使用0b0B前缀:

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

如果你传递0作为基数,那么如果string没有用前缀指定,它将假定基数为10。

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

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

您可以将一个整数传递给bin以查看二进制文字的string表示forms:

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

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

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

如果你不是以0开始,那么python会假定这个数字是10。

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

据我可以告诉Python,直到2.5,只支持hex和八进制文字。 我确实发现了一些有关将二进制文件添加到未来版本的讨论,但没有一个确定

我很确定这是Python 3.0中可能用bin()去执行hex()和oct()的事情之一。

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