如何在Python中表示二进制字面量?

407 投票
8 回答
340928 浏览
提问于 2025-04-10 23:29

如何用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 语法来表示八进制。

8 个回答

41

如何在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作为进制传入,它会假设是十进制,前提是字符串没有指定前缀:

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

从整数转换回人类可读的二进制:

你可以把一个整数传给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'
85
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255

还有一种方法。

358

供参考——未来 Python 的一些可能性:
从 Python 2.6 开始,你可以用前缀 0b0B 来表示二进制数字:

>>> 0b101111
47

你还可以使用新的 bin 函数来获取一个数字的二进制表示:

>>> bin(173)
'0b10101101'

文档的开发版本:Python 2.6 新特性

撰写回答