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

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

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

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

和八进制:

>>> 01267
695
>>> 0100
64

你如何使用文字来表达Python中的二进制文件?


答案摘要

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

6 答案

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

其他方式。

0
额外
当你有字符串时,这很有趣,但如果使用纯数字,则会为代码添加不必要的计算。
额外 作者 Daniel Möller,

我非常肯定这是Python 3.0中的一个变化,可能使用bin()去执行hex()和oct()。

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

0
额外

As far as I can tell Python, up through 2.5, only supports hexadecimal & octal literals. I did find some discussions about adding binary to future versions but nothing definite.

0
额外

你如何在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中进行了更改:现在允许将下划线用于文字分组。

其他表达二进制的方式:

你可以在一个可以被操作的字符串对象中包含零和字符串(尽管在大多数情况下你可能只需要对整数进行按位运算) - 只需将int和零的字符串以及从中转换而来的基数(2 ):

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

您可以选择使用 0b0B 前缀:

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

如果您将 0 作为基数传递它,那么如果字符串没有用前缀指定,它将采用基数10:

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

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

您可以将整数传递给bin以查看二进制文字的字符串表示形式:

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

For reference—future Python possibilities:
Starting with Python 2.6 you can express binary literals using the prefix 0b or 0B:

>>> 0b101111
47

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

>>> bin(173)
'0b10101101'

Development version of the documentation: What's New in Python 2.6

0
额外

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

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

如果你不从0开始,那么python会假设数字是10。

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